การจัดเก็บข้อมูล ~ 3.5TB และการแทรกข้อมูลประมาณ 1K / วินาที 24x7 และการสืบค้นในอัตราที่ไม่ได้ระบุไว้เป็นไปได้ด้วย SQL Server แต่มีคำถามเพิ่มเติม:
- สิ่งที่คุณต้องการสำหรับสิ่งนี้? 99.999% uptime หรือ 95% เพียงพอหรือไม่
- คุณมีข้อกำหนดด้านความน่าเชื่อถืออะไรบ้าง? การขาดเม็ดมีดทำให้คุณเสียค่าใช้จ่าย 1 ล้านเหรียญหรือไม่?
- คุณมีข้อกำหนดในการกู้คืนอะไรบ้าง? หากคุณสูญเสียข้อมูลหนึ่งวันมันสำคัญหรือไม่?
- คุณมีข้อกำหนดด้านความสม่ำเสมออะไรบ้าง? จำเป็นต้องรับประกันว่างานเขียนจะปรากฏในการอ่านครั้งต่อไปหรือไม่?
หากคุณต้องการข้อกำหนดเหล่านี้ทั้งหมดที่ฉันเน้นไว้การโหลดที่คุณเสนอจะมีค่าใช้จ่ายหลายล้านในฮาร์ดแวร์และการออกใบอนุญาตในระบบเชิงสัมพันธ์ระบบใด ๆ ไม่ว่าคุณจะลองใช้ลูกเล่นใด (การแตกการแบ่งพาร์ติชัน ฯลฯ ) ระบบ nosql จะไม่เป็นไปตามข้อกำหนดเหล่านี้ทั้งหมด
เห็นได้ชัดว่าคุณได้ผ่อนคลายข้อกำหนดเหล่านี้บางส่วนแล้ว มีคู่มือภาพที่ดีในการเปรียบเทียบข้อเสนอ nosql ตามกระบวนทัศน์ 'เลือก 2 จาก 3' ที่Visual Guide to NoSQL Systems :
หลังจากอัปเดตความคิดเห็น OP
ด้วย SQL Server สิ่งนี้จะนำไปใช้โดยตรง:
- หนึ่งตารางเดียวที่คลัสเตอร์คีย์ (GUID, เวลา) ใช่กำลังจะแยกส่วนแต่การแยกส่วนมีผลต่อการอ่านล่วงหน้าและการอ่านล่วงหน้าจำเป็นสำหรับการสแกนช่วงสำคัญเท่านั้น เนื่องจากคุณค้นหาเฉพาะ GUID และช่วงวันที่ที่เฉพาะเจาะจงการแยกส่วนจะไม่สำคัญมาก ใช่เป็นคีย์แบบกว้างดังนั้นหน้าที่ไม่มีลีฟจะมีความหนาแน่นของคีย์ต่ำ ใช่มันจะนำไปสู่ปัจจัยการเติมที่ไม่ดี และใช่อาจเกิดการแยกหน้า แม้จะมีปัญหาเหล่านี้ตามข้อกำหนด แต่ก็ยังคงเป็นตัวเลือกคีย์คลัสเตอร์ที่ดีที่สุด
- ตารางพาร์ทิชันตามเวลาเพื่อให้คุณสามารถดำเนินการลบที่มีประสิทธิภาพของระเบียนที่หมดอายุผ่านหน้าต่างบานเลื่อนอัตโนมัติ เพิ่มสิ่งนี้ด้วยการสร้างพาร์ติชันดัชนีออนไลน์ของเดือนที่แล้วเพื่อกำจัดปัจจัยการเติมที่ไม่ดีและการแยกส่วนที่นำมาใช้โดยการทำคลัสเตอร์ GUID
- เปิดใช้งานการบีบอัดหน้า เนื่องจากกลุ่มคีย์คลัสเตอร์ตาม GUID ก่อนระเบียนทั้งหมดของ GUID จะอยู่ติดกันทำให้การบีบอัดเพจมีโอกาสที่ดีในการปรับใช้การบีบอัดพจนานุกรม
- คุณจะต้องมีเส้นทาง IO ที่รวดเร็วสำหรับไฟล์บันทึก คุณสนใจในปริมาณงานสูงไม่ใช่เวลาแฝงต่ำสำหรับบันทึกเพื่อให้ทันกับเม็ดมีด 1K / วินาทีดังนั้นจึงต้องมีการลอก
การแบ่งพาร์ติชันและการบีบอัดเพจแต่ละครั้งต้องใช้ Enterprise Edition SQL Server ซึ่งจะไม่สามารถใช้งานได้กับ Standard Edition และทั้งสองอย่างมีความสำคัญมากในการตอบสนองความต้องการ
ตามหมายเหตุด้านข้างถ้าบันทึกมาจากฟาร์มเซิร์ฟเวอร์ของเว็บส่วนหน้าฉันจะใส่ Express ในแต่ละเว็บเซิร์ฟเวอร์และแทนที่จะใส่ข้อมูลที่ส่วนหลังฉันจะSEND
ให้ข้อมูลไปที่ส่วนหลังโดยใช้การเชื่อมต่อ / ธุรกรรมภายในเครื่อง บน Express ที่อยู่ร่วมกับเว็บเซิร์ฟเวอร์ สิ่งนี้ให้เรื่องราวความพร้อมใช้งานที่ดีขึ้นมากสำหรับโซลูชัน
นี่คือวิธีที่ฉันจะทำใน SQL Server ข่าวดีก็คือปัญหาที่คุณต้องเผชิญนั้นเป็นที่เข้าใจกันดีและทราบวิธีแก้ปัญหาแล้ว นั่นไม่ได้แปลว่านี่จะดีกว่าสิ่งที่คุณสามารถทำได้ด้วย Cassandra, BigTable หรือ Dynamo ฉันจะให้ใครบางคนที่มีความรู้มากขึ้นในสิ่งที่ไม่มี sql-ish เพื่อโต้แย้งกรณีของพวกเขา
โปรดทราบว่าฉันไม่เคยพูดถึงโมเดลการเขียนโปรแกรมการสนับสนุน. Net และอื่น ๆ ฉันคิดตามตรงว่ามันไม่เกี่ยวข้องกับการปรับใช้ขนาดใหญ่ พวกเขาสร้างความแตกต่างอย่างมากในกระบวนการพัฒนา แต่เมื่อนำไปใช้แล้วไม่สำคัญว่าการพัฒนาจะเร็วแค่ไหนหากค่าใช้จ่าย ORM ทำลายประสิทธิภาพ :)