ในจุดนั้นยังเก็บเป็นจำนวนมากขนาดใหญ่ของ structured ข้อมูลของมือแก้จุดเหลือสมเหตุสมผลอีกงั้นเหรอ

0

คำถาม

เรากำลังวิ่งออกฐานข้อมูลลับของเว็บโปรแกรมสำหรับข้อมูลการวิเคราะห์,ปัจจุบันจากพื้นฐาน C#.NET กับ EntityFramework บนเซิร์ฟเวอร์และส่วนใหญ่เป็นแบบ HTML+จาวาสคริปต์ frameworks บลูกค้าด้านข้าง(เว็บพื้นฐาน).

ของโปรแกรมเป็นประจำอย่างเราได้รับคำขู่แบบนี้ measurement X/Y datapoints batched ในขนาดใหญ่ amounts,i.e. 1e6 หรือมากกว่านี้อัปโหลดไปโดยผู้ใช้หรือถูกเซ็นกำกับโดยกันแป.

ตอนนี้เรามีโต๊ะอยู่ใน MSSQL เรียกว่า Values กับ id, series_id as int; x, y, z as float. โต๊ะนี่ BULK INSERT เต็มไปด้วยข้อมูลเมื่อลูกค้าของ uploads มันและคนที่เกี่ยวข้องข้อมูลกำกับภาพคือช่วยใน Series โต๊ะด้วย คนทั้งหมด db ขนาดปัจจุบันที่กำลังเข้ามาใกล้ 1TB,99.99%ของซึ่งมัน Values ข้อมูล

มันเป็นวิธีง่ายๆที่จะดำเนิแต่มันมีหลาย drawbacks ซึ่งทำให้มันซับซ้อนและเชื่องช้ามากเวลา:

  • เราต้องแทรกในท่อนต้องไม่เกิดจากกา IIS โพรเซสซึ่ง preprocesses มัน(ค่าที่ใช้ในปัจจุบัน 200'000 datapoints ต่อชิ้นส่วน)
  • IIS โพรเซสความทรงจำความต้องการระหว่างแทรกเป็นใหญ่มาก(>1500MB สำหรับ 200MB ของข้อมูล)
  • ฤติกรรมโรคจิต--การแทรกเกินไปช้า(5 ล้านบันทึกของ 100MB นี้ต้องใช้>30 วินาทีเพื่อแทรกแม้แต่จะใช้ก้อนข้อมูลแทรก)
  • ระหว่างแทนที่ทั้งโต๊ะก็คือล็อค i.e. นเดียวของผู้ใช้สามารถแทรกช่วงเวลา
  • กำลังรับข้อมูลมันก็ยังค่อนข้างช้าต้องการ 1e6 บันทึกบางครั้งต้องใช้>10 วินาที
  • ทำการลบชุดกับ>1e6 บันทึกเป็นประจำทำให้ timeouts บนเว็บโปรแกรด้านหนึ่ง

ข้อมูลไม่เคยบางส่วนที่เลือกไว้ดังนั้นเราไม่จำเป็นต้องมีมันอยู่ในโต๊ะ แต่มันคือ'thinned ออกไป'เพื่อแสดงก่อนที่ส่งให้ลูกค้า i.e. 1e6 บันทึกของ-โดยปริยายแล้ i.e. ใน 99%ของใช้คดี-ถูกลดขนาดลงเหลือ 2000 หรือ 10 ขวบ'000 บันทึกก่อนที่จะส่งไปที่ลูกค้า นี่คือแคชข้อมูลที่ลูกค้าแต่ถ้าเป็นลูกค้าใหม่ขอร้องให้เหมือนกัตั้งค่ามันถูกประมวลผลอีกครั้ง ค่าโต๊ะก็ยังต้องมีดัชนีบน series_id ซึ่งต้องใช้มากกตรวจสอบพื้นที่ดิสก์มากกว่าโต๊ะตัวมันเอง

ฉันสงสัยว่ามันฟังดูมีเหตุผลเพื่อเปลี่ยนองเก็บของที่รูปแบบไปแก้จุดเหลือห้องเก็บของใน"ค่า"กับตัวมันเองข้อมูลรูปแบบ(แฟ้ม csv หรือ LANGUAGE หรืฐานสอง)และบางที-คอลัมน์เพิ่มเติมกับ preprocessed'ลด'datasets สำหรับแสดงผลซึ่งได้ถูกผลักไปกองลูกค้าโดยไม่เปลี่ยน(eg. ใน LANGUAGE). ดังนั้นคนใหม่ Values โต๊ะรูปแบบจะเป็นอะไรสักอย่างเหมือน

id, series_id, data(blob), reduced_data(blob)

และนั่นเป็นเพียงแค่หนึ่ง Value ต่อ Series รายการไม่ใช่ 1e6 หรือมากกว่านั้น ปลดวันที่จะสร้างขึ้นมาครั้งนึงตอนที่อัพโหลดข้อมูลคืนได้รับแล้วสำหรับใช้ในการแสดงตอนที่ลูกค้าของมัน

ฉันจะสูญเสียบางส่วนของเลือก values โดยหมายเลขหรือเอ็กซ์/Y นค่าแต่งค่าเป็นไม่เคยเลือกจากพื้นฐานอะไรก็ตามที่นอกเหนือจากว่า id หรือ series_id งั้นนี่คือ ปัจจุบันที่ ไม่ใช่ limitation. ดังนั้นนี่เป็นของฉันคำถาม:

  • มีเหตุผลที่ทั้งหมดเหรอ? ฉันหวังว่าการสร้างและเครื่องมือลบของผู้ใหญ่แก้จุดเหลือวันที่จะเป็นเสมสำคัญได้เร็วกว่าการสร้างและเครื่องมือลบของ 1,000,000 ดเดียวรายการบันทึก เรื่องจริงเหรอ?
  • ฐานสองแก้จุดเหลือหรือแฟ้ม csv/LANGUAGE/..แก้จุดเหลือ? คนงานง่ายสุดวิธีแก้จุดเหลือเก็บข้อแน่นอนเพื่อสร้างที่ใหญ่มากแฟ้ม csv หรือ LANGUAGE ชิ้นส่วนช่วยมัน(อาจจะ gzipped)ในฐานข้อมูล เป็นกำหนดเองข้อมูลฐานสองรูปแบบจะต้องเล็กลงแต่มันจะต้องถูกแปลงไป LANGUAGE ก่อนที่จะส่งไปรายชื่อรั่วไหลออก

ฉันมีความรู้สึกเพิ่มเติม hassle องมากับข้อมูลฐานสองรูปแบบอาจจะไม่คุ้มค่ามันและมันจะดีกว่าต้อง gzip งแฟ้ม csv/LANGUAGE แก้จุดเหลือเกินกว่าจะสร้างเรื่องขึ้นมาเองได้เป็นแฟ้มแบบไบนารี เรื่องจริงเหรอ?

ยังไงเรื่องอื่น drawbacks ของลูกบอลที่ฉันอาจจะไม่รู้อีกเหรอ? ขนาดของ limitations ไม่เหมือนจะเป็นปัญหา varbinary(MAX) เป็นเพียงพอ ฉันไม่ต้องมีดัชนีบนค่า ใน แก้จุดเหลือแค่บข้อมูลกำกับภาพ(ซึ่งอยู่ในชุดโต๊ะ).

ความคิด?

blob database-performance sql-server
2021-11-15 20:49:09
1

คำตอบที่ดีที่สุด

1

หนึ่งในหลักของนายได้เปรียบอะไรบ้างสำหรับจัดเก็บแฟ้มใน Db คือ ACID (Atomicity,วามสอดคล้องกันในตัแยกขังเดี่ยว,Durability)เทคโนโลยีในดีบีเอส. นี่เปิดให้พวกเราต้อง securely แทรกข้อมูลทั้งหมดเข้าไปในแตกต่างตารางข้อมูลเรียบร้อยแล้วเมื่อเราทำงานอยู่บข้อมูลออกมา ตอนที่คุณเก็บของแฟ้มใน DB เป็นแก้จุดเหลือคุณมีประโยชน์เมื่อการคัดลอกแฟ้มเพื่อนอีกห้องเก็บของเพราะแก้จุดเหลือเป็นเร็วกว่าปฏิบัติการระบบแฟ้มและคุณสามารถอย่างง่ายดายสำรองของแฟ้ม แต่ถ้าคุณขนาดแฟ้มสำหรับแต่ละประวัติเป็นมากกว่า 10-50-100 MB นั่นไม่ใช่ขอแนะนำให้เก็บแฟ้มที่อยู่ในแก้จุดเหลือ. ในกรณีนี้คือช่วงเวลาของฤติกรรมโรคจิต--การแทรบันทึกขอไปที่โต๊ะอาจจะเอา 10-15-30 วินาที มันไม่หลับสบายเลยแหละเพราะงเกี่ยวกับธุรกรรมสุดท้ายดังนั้นนานเหมือนกันและทั้งหมดตารางข้อมูลเรียบร้อยแล้วระหว่างการต่อรองอยู่ในวามรู้สึกเป็นกบล็อกอย่างที่คุณรู้และนานจอดปิดทางของพวกนี้ตารางข้อมูลเรียบร้อยแล้วจะทำยังว่าผู้ใช้จะไม่สามารถไปทำงานแล้ว หนึ่งในคนที่น่าสนใจวิธีจัดเก็บแฟ้มที่แก้จุดเหลือคือ FILESTREAM แก้จุดเหลืองเทคโนโลยีซึ่งเป็นการรองรับเพียงโดยภาษา sql เซิร์ฟเวอร์ คุณสามารถได้ข้อมูลมากกว่านี้สำหรับเทคโนโลยีจาก นี้

2021-11-18 21:34:15

ขอบคุณสำหรับ pointer. ฉัน benchmarked แทรของหลายช่วงตึกของ 50MB ของข้อมูลไปเป็นตัวอย่างเช่นโต๊ะของเราการผลิตกองเซิร์ฟเวอร์และกันและเอา 1-2 วินาทีซึ่งนั่นเป็นการเห็นชอบด้วย แต่ FILESTREAM แก้จุดเหลือเป็นความคิดที่ดีเหมือนกัน
Jens

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................