สำหรับตัวเลขที่คุณพูดถึงฉันคิดว่าตัวเลือกทั้งหมดควรใช้งานได้ (อ่าน: คุณจะสามารถวิเคราะห์ให้เสร็จในเวลาที่เหมาะสม) ฉันแนะนำเกี่ยวกับการออกแบบที่สามารถนำไปสู่ผลลัพธ์ที่รวดเร็วยิ่งขึ้น
ดังคำตอบก่อนหน้านี้โดยทั่วไป postgresql เร็วกว่า mongo บางครั้งเร็วกว่า 4 เท่า ดูตัวอย่าง:
http://www.enterprisedb.com/postgres-plus-edb-blog/marc-linster/postgres-outperforms-mongodb-and-ushers-new-developer-reality
คุณบอกว่าคุณสนใจที่จะปรับปรุงประสิทธิภาพในการเข้าร่วม ฉันคิดว่าคุณมีความสนใจในการคำนวณความคล้ายคลึงกันระหว่างเอนทิตี (เช่นโพสต์ผู้แต่ง) ดังนั้นคุณจะเข้าร่วมตารางด้วยตนเอง (เช่นโพสต์หรือผู้เขียน) และรวม
เพิ่มไปที่ข้อเท็จจริงที่ว่าหลังจากเริ่มต้นการโหลดฐานข้อมูลของคุณจะอ่านได้อย่างเดียวสิ่งที่ทำให้ปัญหาเหมาะสมกับการใช้ดัชนี คุณจะไม่จ่ายสำหรับการปรับปรุงดัชนีเนื่องจากคุณไม่มีและฉันคิดว่าคุณมีพื้นที่เก็บข้อมูลเพิ่มเติมสำหรับดัชนี
ฉันจะใช้ postgres และเก็บข้อมูลไว้ในสองตาราง:
สร้างโพสต์ตาราง (จำนวนเต็ม post_id, url varchar (255), จำนวนเต็ม author_id);
- โหลดข้อมูลแล้วสร้างดัชนี - นั่นจะนำไปสู่การโหลดที่เร็วขึ้นและดัชนีที่ดีกว่าแก้ไขการโพสต์ตารางเพิ่มข้อ จำกัด posts_pk คีย์หลัก (post_id); สร้างดัชนี post_author ในโพสต์ (author_id);
สร้างความคิดเห็นตาราง (จำนวนเต็ม comment_id, จำนวนเต็ม post_id, จำนวนเต็ม author_id, ความคิดเห็น varchar (255)); แก้ไขความคิดเห็นของตารางเพิ่มข้อ จำกัด comments_pk คีย์หลัก (comment_id); สร้างดัชนี comment_author เกี่ยวกับความคิดเห็น (author_id); สร้างดัชนี comment_post เกี่ยวกับความคิดเห็น (post_id);
จากนั้นคุณสามารถคำนวณความคล้ายคลึงกันของผู้แต่งโดยอ้างอิงจากความคิดเห็นในข้อความค้นหาเช่นเลือก m author_id ในฐานะ m_author_id, a. author_id ในฐานะ a_author_id นับ (แตกต่าง m.post_id) เป็นโพสต์จากความคิดเห็นเป็น m เข้าร่วมแสดงความคิดเห็นในฐานะกลุ่มที่ใช้ (post_id) โดย m.author_id, a AUTHOR_ID
ในกรณีที่คุณสนใจ tokenzing คำในความคิดเห็นสำหรับ nlp ให้เพิ่มอีกหนึ่งตารางสำหรับสิ่งนั้น แต่โปรดจำไว้ว่ามันจะเพิ่มปริมาณข้อมูลของคุณอย่างมีนัยสำคัญโดยปกติแล้วจะเป็นการดีกว่าที่จะไม่แสดง tokenization ทั้งหมดในฐานข้อมูล