โมเดลฐานข้อมูลที่มีประสิทธิภาพสำหรับการจัดเก็บข้อมูลที่จัดทำดัชนีโดย n-grams


12

ฉันกำลังทำงานกับแอปพลิเคชันที่ต้องสร้างฐานข้อมูลขนาดใหญ่มากซึ่งมีอยู่ในคลังข้อความขนาดใหญ่

ฉันต้องการประเภทการดำเนินงานที่มีประสิทธิภาพสามประเภท: การค้นหาและการแทรกดัชนีที่จัดทำโดย n-gram เองและทำการค้นหา n-g ทั้งหมดที่มี sub-n-gram

สิ่งนี้ฟังดูเหมือนว่าฐานข้อมูลควรเป็นแผนผังเอกสารขนาดใหญ่และฐานข้อมูลเอกสารเช่น Mongo ควรจะสามารถทำงานได้ดี แต่ฉันไม่เคยใช้มันในระดับใด

รู้รูปแบบคำถามของ Exchange Exchange ฉันต้องการชี้แจงว่าฉันไม่ได้ขอคำแนะนำเกี่ยวกับเทคโนโลยีเฉพาะ แต่ควรเป็นฐานข้อมูลประเภทหนึ่งที่ฉันควรมองหาเพื่อนำไปใช้ในระดับนี้


2
ฉันคิดว่าโครงสร้างที่คุณต้องการนำมาใช้เป็น "trie" - ไม่ว่าคุณจะสามารถค้นหา DB ที่ทำงานได้อย่างมีประสิทธิภาพกับโครงสร้างนั้นหรือต้องหมุน RDBMS ของคุณเองตามที่คุณต้องการฉันไม่สามารถพูดได้
Neil Slater

คำตอบ:


9

ดูLucene NGramTokenizer

คุณแน่ใจหรือว่าไม่สามารถใช้เทคนิคการสร้างดัชนีลูเซี่ยนหรือเทคนิคที่คล้ายกัน?

ดัชนีฤvertedษีจะเก็บ n-gram เพียงครั้งเดียวจากนั้นแค่รหัสเอกสารที่มี ngram พวกเขาไม่เก็บข้อความนี้ไว้เป็นข้อความดิบซ้ำซ้อนสูง

สำหรับการค้นหา ngrams ที่มี sub-n-gram ในแบบสอบถามของคุณฉันจะสร้างดัชนีบน ngrams ที่สังเกตเช่นใช้ดัชนี lucene อันที่สองหรือดัชนี substring อื่น ๆเช่นต้นไม้ trie หรือต่อท้าย หากข้อมูลของคุณเป็นแบบไดนามิกลูซินอาจเป็นตัวเลือกที่สมเหตุสมผลโดยใช้ข้อความค้นหาเพื่อค้นหา n-g


3

โดยพื้นฐานแล้วสำหรับงานนี้คุณสามารถใช้ฐานข้อมูล SQL ใด ๆ ได้อย่างมีประสิทธิภาพด้วยการสนับสนุนที่ดีของดัชนีแบบต้นไม้ B + (MySQL จะเหมาะกับคุณที่สมบูรณ์แบบ)

สร้าง 3 ตาราง:

  1. ตารางเอกสาร, คอลัมน์: id / document
  2. ตาราง N-grams: n_gram_id / n_gram
  3. การแม็พระหว่าง n-grams กับเอกสาร: document_id / n_gram_id

สร้างดัชนีบนสตริง N-gram table / n_gram และ Mapping table / n_gram_id นอกจากนี้คีย์หลักจะถูกทำดัชนีโดยค่าปริยายด้วย

การดำเนินงานของคุณจะมีประสิทธิภาพ:

  1. การแทรกเอกสาร: เพียงดึง n-g ทั้งหมดและแทรกลงในตารางเอกสารและตาราง N-g
  2. การค้นหา in_gram จะรวดเร็วด้วยการสนับสนุนของดัชนี
  3. การค้นหาสำหรับ n-g ทั้งหมดที่มี sub-n-gram: ใน 2 ขั้นตอน - เพียงค้นหาตามดัชนี n-g ทั้งหมดซึ่งมี sub-n-gram จากตารางที่ 2 จากนั้น - เรียกเอกสารที่เกี่ยวข้องทั้งหมดสำหรับแต่ละ n-g

คุณไม่จำเป็นต้องใช้การเข้าร่วมเพื่อบรรลุการดำเนินการทั้งหมดเหล่านี้ดังนั้นดัชนีจะช่วยได้มาก นอกจากนี้หากข้อมูลจะไม่ถูกกำหนดในเครื่องหนึ่ง - คุณสามารถใช้รูปแบบการแบ่งส่วนเช่นการจัดเก็บ n_grams เริ่มต้นจากบนเซิร์ฟเวอร์หนึ่งและออนซ์ในรูปแบบอื่นหรืออื่น ๆ ที่เหมาะสม

นอกจากนี้คุณสามารถใช้ MongoDB ได้ แต่ฉันไม่แน่ใจว่าคุณต้องใช้รูปแบบการจัดทำดัชนีอย่างไร สำหรับ MongoDB คุณจะได้รับรูปแบบการแบ่งส่วนฟรีตามที่มีอยู่แล้วในตัว


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.