SQL Server และ Mongo สามารถใช้ร่วมกันได้หรือไม่


14

เรามีเว็บไซต์ข่าวขนาดใหญ่ที่มีการเข้าชมเว็บสูง สถาปัตยกรรมเป็น DB - Repo Layer ที่คุณมักจะเห็น - Services Layer - Asp.Net MVC ปัญหาที่เราเห็นคือเรื่องประสิทธิภาพการอ่าน ปรากฎว่าทุกสิ่งในโดเมน DDD นี้เป็นสิ่งที่ยอดเยี่ยมในทางทฤษฎีสำหรับกฎเกณฑ์ทางธุรกิจ แต่ทำให้ชีวิตยากขึ้นเมื่อต้องเพิ่มประสิทธิภาพการอ่าน

เป็นวิธีแก้ปัญหาฉันกำลังพิจารณาสิ่งใหม่ทั้งหมด (สำหรับเรา): การใช้ noSQL ฉันต้องการใช้ฐานข้อมูล noSQL สำหรับข้อมูลที่นำเสนอบนเว็บไซต์ของเรา เราไม่สามารถกำจัด SQL Server ของเราได้ (อย่างน้อยก็ไม่ทุกเวลาเร็ว ๆ นี้) แต่สำหรับผมแล้วดูเหมือนว่าขั้นตอนการปฏิบัติจะใช้ Mongo เป็นฐานข้อมูลแบบสอบถามสำหรับการพัฒนาใหม่ทั้งหมด

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

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

แต่เมื่อผู้ดูบนเว็บไซต์ดูบทความหรือรายการบทความฉันต้องการใช้ประโยชน์จากประสิทธิภาพของ Mongo กับ SQL Server เพื่อให้ข้อมูลค่อนข้างเป็นปัจจุบันสมมติว่า 15 นาทีหรือน้อยกว่าข้อมูล SQL Server จะต้องรีเฟรช Mongo RDBMS มีเครื่องมือการจำลองแบบสำหรับการดำเนินการเช่นนี้และฉันสงสัยว่ามีอะไรที่ต้องทำเช่นเดียวกันจาก SQL Server ไปยัง Mongo เซิร์ฟเวอร์ Lync ใช่ไหม


3
ไปได้หรือไม่ แน่นอนมันเป็นไปได้เป็นสองแยกเก็บข้อมูล คุณถามอะไรที่นี่อย่างแน่นอน
Oded

แต่คุณสามารถใช้ร่วมกันได้หรือไม่ ด้วย Mongo DB โดยทั่วไปจะทำหน้าที่เป็นแคชแบบอ่านอย่างเดียวสำหรับข้อมูลหรือไม่
John

1
แน่นอนว่าคุณสามารถ "ใช้ร่วมกันได้" แต่มันไม่ชัดเจนว่ามันหมายถึงอะไร ตราบใดที่คุณมีกลไกการอัพเดตบางอย่างสำหรับ Mongo คุณก็พร้อมที่จะไป ดูโพสต์ของUdi Dahan - แต่ขึ้นอยู่กับคุณที่จะกำหนดกลไก
Oded

1
เราไม่เคยย้ายไป MongoDB แต่ดูเหมือนว่าในปีหน้าเราอาจจะ อีกหนึ่งวิธีการเปลี่ยนผ่านที่เราได้ทำคือการจัดเก็บ JSON ในเขตข้อมูล varchar จากทุกสิ่งที่ฉันอ่านไม่มีวิธีที่ดีในการเคลื่อนย้ายข้อมูลไปมาระหว่าง NoSQL และ SQL - ทุกอย่างจะต้องถูกกำหนดเองโดยเฉพาะอย่างยิ่งเนื่องจากฐานข้อมูล NoSQL ที่แตกต่างกันอย่างมากในวิธีที่พวกเขาทำสิ่งต่าง ๆ .
จอห์น

1
@ John ถ้าคุณกำลังมองที่จะติดกับเชิงสัมพันธ์และยินดีที่จะย้ายออกจาก SQL Server คุณอาจต้องการที่จะดูที่ PostgreSQL และบูรณาการ JSON ดังนั้นการจัดเก็บข้อมูลในคอลัมน์ json ซึ่งสามารถจัดการได้ภายในฐานข้อมูล

คำตอบ:


13

คุณพบปัญหาที่หลายคนมีอยู่ก่อนหน้านี้ ... ฐานข้อมูลที่เหมาะสำหรับการอ่านนั้นไม่ค่อยดีสำหรับประสิทธิภาพการเขียนและในทางกลับกัน วิธีการหนึ่งที่มีวิวัฒนาการมาจากสิ่งกีดขวางการอ่าน - เขียนนี้คือ CQRS (การแยกความรับผิดชอบคำสั่งแบบสอบถาม) แม้ว่า Wikipedia จะเชื่อมโยงทั้งสองเข้าด้วยกัน CQRS และ CQS นั้นมีความแตกต่างทางเทคนิค CQS เพียงต้องการให้วิธีการใดทำการเปลี่ยนแปลง (คำสั่ง) หรือถามข้อมูล (แบบสอบถาม) ไม่เคยทั้งคู่

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

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

ทางเลือกที่ดียิ่งขึ้นคือการให้บริการ Command ของคุณเริ่มต้นเหตุการณ์เมื่อมีการอัพเดท จากนั้นคุณจะมีบริการที่ฟังเหตุการณ์นั้นและปรับปรุง MongoDB ด้วยข้อมูลนั้น นั่นคือวิธีการพื้นฐานในการจัดหากิจกรรม (ค้นหาการจัดหากิจกรรมบนหน้า)

Greg Young หนึ่งในผู้นำด้านความคิดในโลก DDD กำลังเขียนหนังสือในซีรี่ส์ Fowler Signature บน CQRS ที่เรียกว่าEvent-Centric (เคยเรียกว่า CQRS) ฟาวเลอร์ได้เขียนโพสต์บน bliki ของเขาอธิบายวิธีการ


+1 CQRS ตรงนี้พอดี ใช้เหตุการณ์เพื่อเติมและอัปเดตฐานข้อมูลเอกสารที่ใช้สำหรับการสร้างมุมมองของคุณและปล่อยให้ฐานข้อมูล sql ของคุณเหมือนเดิม
quentin-starin

เราไม่ได้ใช้ระบบ CQRS แต่ฉันได้ให้ความสนใจกับสิ่งที่ Greg, Udi และคนอื่น ๆ เขียน ส่วนใหญ่ของ CQRS ไม่ใช่แพลตฟอร์มที่เฉพาะเจาะจง แต่แค่คิดถึงคำสั่งและข้อความค้นหาแยกต่างหาก ฉันไม่คิดว่า Greg จะเคยเขียนหนังสือมาก่อนเลยถึงแม้ว่า Microsoft Patterns and Practices ก็ปล่อยหนังสือเล่มนั้นออกมา
จอห์น

1
สิ่งเดียวที่ฉันจะเพิ่มในคำตอบนี้คือ: หากกรณีการใช้งานของคุณเฉพาะเกี่ยวกับการใช้กับ MS SQL และ MVC คุณเคยพิจารณาBrightstarDBแทน MongoDB สำหรับส่วน NoSQL หรือไม่? มันมีเอนทิตีกรอบและความเข้ากันได้ LINQ ซึ่งอาจช่วยให้การเปลี่ยนแปลงสำหรับคุณ
CrazyPyro

1

ใช่. ในโครงการปัจจุบันของเราเราได้รับข้อมูลและเก็บไว้ใน SQL Server แล้วสร้างดัชนีการค้นหาโดยใช้ Lucene / Solr และเก็บไว้ใน MongoDB การเติมข้อมูล MongoDB ทำได้ด้วยตัวโหลดที่กำหนดเองแม้ว่าจะไม่มีการจำลองแบบของ SQL Server หรือการรีเฟรชอัตโนมัติ


โอเคฉันแค่อยากรู้อยากเห็นทำไมไม่ลองเติม Mongo โดยตรงล่ะ คุณอยู่ภายใต้ข้อ จำกัด เดียวกันกับที่ต้องใช้ทั้งคู่หรือไม่?
yati sagade

SQL Server ที่มีอยู่ของเราไม่สามารถเขียนใหม่ข้ามคืนได้ ความคิดของฉันคือว่านี่เป็นขั้นตอนทารกที่มีขนาดเล็ก แต่มีประโยชน์
John

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