วิธีที่ดีที่สุดสำหรับฐานข้อมูลของสตริงยาว


12

ฉันต้องการเก็บคำถามและคำตอบในฐานข้อมูล คำถามจะเป็นหนึ่งถึงสองประโยค แต่คำตอบจะมีความยาวอย่างน้อยหนึ่งย่อหน้ามีแนวโน้มมากกว่า

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


คุณเคยค้นหาข้อความเต็มหรือไม่? en.wikipedia.org/wiki/Full_text_search
FrustratedWithFormsDesigner

โปรดกำหนด "ยาว" 1k, 5M, 1GB ??
James Anderson

ทำไมคุณไม่ชอบสตริง "ดิบ" ข้อมูลเป็นสตริงจริงหรือเป็นข้อมูลที่มีโครงสร้างหรือไม่ คุณวางแผนที่จะทำอะไรบางอย่างกับมันที่จะไม่ทำงานสำหรับสตริง? คำถามของคุณไม่มีเหตุผลที่ชัดเจนว่าทำไมฐานข้อมูลไม่เหมาะสม เช่นเดียวกันกับสตริง (หรืออาจเป็น CLOBS หากมีขนาดใหญ่เกินไปและขึ้นอยู่กับฐานข้อมูลที่คุณใช้)
psr

ฉันหมายถึงวิธีที่ชาญฉลาดในการจัดเก็บพวกเขาอาจผ่านการบีบอัดบางประเภทไม่ใช่สตริงธรรมดา ฉันเป็นห่วงเกี่ยวกับขนาดของฐานข้อมูลที่นี่
gsingh2011

1
คุณใช้ RDBMS รุ่นใด Oracle มีการสนับสนุนที่ยอดเยี่ยมสำหรับการจัดการและค้นหาข้อความ
Matthew Flynn

คำตอบ:


19

Mongodb นั้นยอดเยี่ยม แต่คุณรู้จัก SQL ไม่มีอะไรผิดปกติกับการจัดเก็บคำตอบยาว ๆ ในฟิลด์ คุณสามารถจัดเก็บภาพหรือแม้กระทั่งไฟล์ใน SQL ฉันคิดว่าขนาดของฟิลด์สูงสุดคือ 2gb

ฉันเกือบจะคิดว่าคำตอบนี้ถูกเก็บไว้ในตารางที่ใดที่หนึ่ง

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


11
+1 เมื่อไม่เพิ่มประสิทธิภาพจนกว่าคุณจะมีปัญหาจริง!
GrandmasterB

4
ขนาดฟิลด์สูงสุดไม่ได้ระบุไว้ใน ANSI SQL ขึ้นอยู่กับ DBMS (และมักจะมีปัจจัยอื่น ๆ เช่น charset, ชนิดข้อมูลคอลัมน์, เอ็นจิ้นการเก็บข้อมูล, ระบบปฏิบัติการ ฯลฯ )
tdammers

6

ไม่มีปัญหาในการจัดเก็บข้อความแบบยาวในฐานข้อมูล (SQL หรืออย่างอื่น) นั่นคือความจริงที่ว่าทุกรายการในบล็อก (คิดว่า Wordpress) บทความข่าวและฟอรั่มโพสต์ (คิดว่า phpbb) บนอินเทอร์เน็ตจะถูกเก็บไว้ ฉันไม่ทราบรายละเอียดเฉพาะของการตั้งค่าการแลกเปลี่ยนสแต็ก แต่ฉันแน่ใจว่าคำถามของคุณถูกเก็บไว้ในฐานข้อมูลด้วย ฐานข้อมูล SQL ส่วนใหญ่มีTEXTประเภทเขตข้อมูลหรือเทียบเท่าเพียงเพื่อวัตถุประสงค์ในการจัดเก็บข้อมูลที่เป็นข้อความของความยาวใด ๆ หลายคนมีระบบค้นหาข้อความแบบเต็มในสถานที่

ตัดสินใจทางเทคนิคตามความรู้และความเข้าใจด้านเทคนิคไม่ใช่ความรู้สึก


5

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

หากคุณกังวลเรื่องพื้นที่จัดเก็บโปรดจำไว้ว่ามันราคาถูก!

หากคุณกังวลเกี่ยวกับประสิทธิภาพ - ไม่ต้องกังวลฐานข้อมูลที่ดีสามารถเพิ่มขนาด (หรือออก) เป็นข้อมูลจำนวนมากที่คุณต้องการ

สิ่งสุดท้ายที่คุณต้องการทำคือเริ่มปรับให้เหมาะสมในตอนนี้เพื่อประโยชน์ของมัน (บีบอัดสายก่อนที่คุณจะใส่ลงในฐานข้อมูลหรือสิ่งที่ถั่ว) ก่อนที่มันจะกลายเป็นปัญหา คุณแค่ให้งานตัวเองมากขึ้น


2

ไม่มีปัญหาในการจัดเก็บสตริงขนาดใหญ่หรือข้อมูลไบนารี ฉันทำงานกับฐานข้อมูลที่มีมากกว่าหนึ่งเทราไบต์ของข้อมูลไบนารีและทำงานได้ดีมาก (postgres) และสิ่งเลวร้ายเพียงอย่างเดียวคือเวลาสำรอง

คำถามใหญ่คือ: "คุณต้องการค้นหาข้อความนี้อย่างต่อเนื่องหรือไม่?"

หากคุณกำลังค้นหาสตริงในข้อความคุณสามารถคิดในโซลูชันดัชนีหนึ่งรายการ:

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