สิ่งใดเร็วกว่า: PostgreSQL vs MongoDB บนชุดข้อมูล JSON ขนาดใหญ่


10

ฉันมีชุดข้อมูลขนาดใหญ่ที่มีวัตถุ JSON ขนาด 9m ที่แต่ละอันมีขนาดประมาณ 300 ไบต์ ข้อความเหล่านี้เป็นบทความจากตัวรวบรวมลิงก์: โดยทั่วไปลิงก์ (URL, ชื่อและรหัสผู้แต่ง) และความคิดเห็น (ข้อความและ ID ผู้เขียน) + ข้อมูลเมตา

พวกเขาอาจเป็นระเบียนเชิงสัมพันธ์ได้ดีในตารางยกเว้นข้อเท็จจริงที่ว่าพวกเขามีเขตข้อมูลแถวเดียวที่มีรหัสที่ชี้ไปยังระเบียนลูก

การใช้งานแบบใดที่ดูแข็งแกร่งกว่านี้?

  1. วัตถุ JSON ในฐานข้อมูล PostgreSQL (เพียงหนึ่งตารางขนาดใหญ่ที่มีหนึ่งคอลัมน์คือวัตถุ JSON)
  2. วัตถุ JSON บน MongoDB
  3. ระเบิดวัตถุ JSON เป็นคอลัมน์และใช้อาร์เรย์ใน PostgreSQL

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


อาจต้องการเช็คเอาต์เกล็ดหิมะ สามารถจัดการข้อมูลที่มีโครงสร้างและกึ่งโครงสร้างร่วมกัน www.snowflake.net

ฉันคิดว่าคุณต้องขยายความหมายของคำว่า "เพิ่มประสิทธิภาพสูงสุดในการเข้าร่วม" เข้าร่วมอะไร
Spacedman

คำตอบ:


10

สำหรับการโหลดข้อมูล Postgre มีประสิทธิภาพเหนือกว่า MongoDB MongoDB นั้นเกือบจะเร็วกว่าเสมอเมื่อส่งคืนการสืบค้น PostgreSQL นั้นเร็วกว่าสำหรับแบบสอบถามที่ใช้ดัชนี

ลองชมเว็บไซต์นี้ และเว็บไซต์นี้เพื่อรับข้อมูลเพิ่มเติม พวกเขามีคำอธิบายอย่างละเอียดมาก


ลิงก์ที่ดีมากเป็นพิเศษดังนั้นลิงค์แรกที่มีรายละเอียดและละเอียดยิ่งขึ้น เมื่อค้นหาปี (สตริง) และส่งคืน id ของการบันทึก (int) potgresql จะเร็วขึ้นประมาณ 4x แต่เมื่อผู้เขียนกลับมาลำดับความสำคัญก็เหมือนกัน MongoDB นั้นช้าลงเพียง 20% เมื่อผู้เขียนส่งคืน มีความแตกต่างพื้นฐานระหว่างการคืนค่า int และการคืนค่าสายอักขระที่สามารถอธิบายสิ่งนี้ได้หรือไม่? นั่นคือถ้าเรกิเป็นสตริงประโยชน์ของ postgresql จะหายไปและทั้งคู่จะเหมือนกันในกรณีของผู้แต่งหรือไม่
MASL

1

คุณอาจได้รับประโยชน์เพิ่มเติมจากการออกแบบแบบแผนของ Mongodb ซึ่งหมายความว่ามันง่ายมากในการปรับเปลี่ยนโครงสร้างข้อมูลได้ทันที

ไม่มีสิ่งเช่นการเข้าร่วมใน Mongodb ดังนั้นวิธีคิดเกี่ยวกับข้อมูลและวิธีการใช้งานนั้นจำเป็นต้องได้รับการแก้ไขเพื่อให้สอดคล้องกับสภาพแวดล้อมของเอกสารและ schemaless db

ความเร็วอาจมีความสำคัญน้อยลงเมื่อมุมมองและลำดับความสำคัญเปลี่ยนไป

ฉันหวังว่าจะช่วย

-Todd


ในมาตรฐานล่าสุด PostgreSQL โดยสิ้นเชิงเป็นเจ้าของ MongoDB ...
เลิก - anony-มู

@ Anony-Mousse: น่าสนใจ คุณรู้แหล่งที่มาหรือไม่?
Isaac

เช่นtiborsimko.org/postgresql-mongodb-json-select-speed.htmlและenterprisedb.com/postgres-plus-edb-blog/marc-linster/จากคำตอบอื่น ๆ เหตุผลสำคัญคือ: Postgres มีดัชนีที่ดีในขณะที่ดัชนีใน MongoDB ไม่คุ้มค่า นอกจากนี้ Postgres ยังรองรับ BSON และส่วนเพิ่มเติมอื่น ๆ สำหรับการจัดการ JSON ที่ปรับปรุงประสิทธิภาพได้อย่างมาก นั่นคือเหตุผลที่มันเร็วกว่ารุ่นแรกมาก
เลิกเล่น - Anony-Mousse

0

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

ดังคำตอบก่อนหน้านี้โดยทั่วไป 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 ทั้งหมดในฐานข้อมูล

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