Mysql: ทำงานกับ 192 ล้านล้านระเบียน… (ใช่ 192 ล้านล้าน)


39

นี่คือคำถาม ...

พิจารณา 192 ล้านล้านบันทึกสิ่งที่ฉันควรพิจารณา

ความกังวลหลักของฉันคือความเร็ว

นี่คือตาราง ...

    CREATE TABLE `ref` (
  `id` INTEGER(13) AUTO_INCREMENT DEFAULT NOT NULL,
  `rel_id` INTEGER(13) NOT NULL,
  `p1` INTEGER(13) NOT NULL,
  `p2` INTEGER(13) DEFAULT NULL,
  `p3` INTEGER(13) DEFAULT NULL,
  `s` INTEGER(13) NOT NULL,
  `p4` INTEGER(13) DEFAULT NULL,
  `p5` INTEGER(13) DEFAULT NULL,
  `p6` INTEGER(13) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY (`s`),
  KEY (`rel_id`),
  KEY (`p3`),
  KEY (`p4`)
    );

นี่คือข้อความค้นหา ...

SELECT id, s FROM ref WHERE red_id="$rel_id" AND p3="$p3" AND p4="$p4"

SELECT rel_id, p1, p2, p3, p4, p5, p6 FROM ref WHERE id="$id"

INSERT INTO rel (rel_id, p1, p2, p3, s, p4, p5, p6)
VALUES ("$rel_id", "$p1", "$p2", "$p3", "$s", "$p4", "$p5", "$p6")

นี่คือบันทึกบางส่วน ...

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

อัปเดต (08/11/2010)

น่าสนใจฉันได้รับตัวเลือกที่สอง ...

แทนที่จะเป็น 192 ล้านล้านฉันสามารถเก็บ2.6 * 10 ^ 16 (15 ศูนย์, หมายถึง 26 Quadrillion) ...

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

ดังนั้นที่ทำให้ฉันคิดว่าจะต้องมีทางออกที่ดีกว่าแล้ว mysql เพียงเก็บหมายเลข ...

ให้ตัวเลือกที่สองนี้ฉันควรจะเอามันหรือติดกับตัวแรก ...

[แก้ไข]เพิ่งทราบข่าวว่ามีการทดสอบเสร็จแล้ว - 100 ล้านแถวด้วยการตั้งค่านี้จะส่งคืนข้อความค้นหาใน 0.0004 วินาที[/ แก้ไข]


7
คุณใช้ MySQL ในการตั้งค่าอย่างไร คุณสามารถโน้มน้าวให้เปลี่ยนเป็น dbms ที่แตกต่างกันได้หรือไม่ถ้ามีใครมีอาร์กิวเมนต์ที่เป็นของแข็งที่จะทำเช่นนั้น?
WheresAlice

3
ล้านล้านเช่นเดียวกับใน 10 ^ 12 หรือใน 10 ^ 18?
andol

15
ที่ 192 ล้านล้านระเบียนคุณควรมีงบประมาณที่อนุญาตให้คุณถามคำถามกับผู้มอบหมาย MySQL ไม่ใช่บางกระดานสนทนา
Remus Rusanu

5
ด้วยฐานข้อมูลขนาดใหญ่นี้ (และเห็นได้ชัดว่าเป็นงบประมาณที่เหมาะสม) ทำไมไม่ลองใช้กับโซลูชัน oracle หรือ sql serer ที่ได้รับการพิสูจน์แล้วว่าจัดการกับฐานข้อมูลขนาดใหญ่ได้อย่างง่ายดาย
Jim B

5
ตรวจสอบให้แน่ใจว่าได้อัปเดตเราเมื่อคุณใช้สิ่งนี้ ฉันจะสนใจแน่นอน คุณอาจต้องการเขียนขึ้นมาเพื่อhighscalability.com
Tom O'Connor

คำตอบ:


30

การประมาณ 7PB ของ pQd นั้นสมเหตุสมผลและนั่นเป็นข้อมูลจำนวนมากสำหรับ RDBMS ฉันไม่แน่ใจว่าฉันเคยได้ยินว่ามีคนกำลังทำ 7PB กับระบบดิสก์ที่ใช้ร่วมกันโดยเฉพาะ MySQL การสอบถามปริมาณข้อมูลนี้ด้วยระบบดิสก์ที่ใช้ร่วมกันจะช้าลงอย่างผิดปกติ ฮาร์ดแวร์ SAN ที่เร็วที่สุดจะให้ความเร็วสูงสุดที่ 20GB / วินาทีแม้ว่าจะทำการปรับสำหรับการค้นหาแบบสตรีมมิ่งขนาดใหญ่ หากคุณสามารถซื้อฮาร์ดแวร์ SAN ของสเป็คนี้คุณสามารถใช้สิ่งที่เหมาะกับงานมากกว่า MySQL

ในความเป็นจริงฉันกำลังดิ้นรนที่จะเข้าใจสถานการณ์ที่คุณอาจมีงบประมาณสำหรับระบบย่อยดิสก์ของข้อมูลจำเพาะนี้ แต่ไม่ใช่สำหรับแพลตฟอร์ม DBMS ที่ดีกว่า แม้แต่การใช้ดิสก์ 600GB (ไดรฟ์ที่ใหญ่ที่สุดขององค์กร '15K ในตลาดปัจจุบัน) คุณก็พร้อมที่จะใช้งานเช่นดิสก์ไดรฟ์กายภาพ 12,000 ชุดเพื่อจัดเก็บ 7PB ดิสก์ SATA จะมีราคาถูกกว่า (และดิสก์ 2TB คุณจะต้องมีประมาณ 1/3 ของจำนวน) แต่ค่อนข้างช้ากว่าเล็กน้อย

SAN ของสเป็คนี้จากผู้ค้ารายใหญ่เช่น EMC หรือ Hitachi จะวิ่งไปหลายล้านดอลลาร์ ครั้งล่าสุดที่ฉันทำงานกับอุปกรณ์ SAN จากผู้จำหน่ายรายใหญ่ค่าใช้จ่ายในการโอนพื้นที่ใน IBM DS8000 มากกว่า 10kk / TB ไม่รวมค่าเผื่อทุนสำหรับผู้ควบคุม

คุณต้องการระบบที่ไม่มีการแบ่งปันใด ๆ เช่น Teradata หรือ Netezza สำหรับข้อมูลจำนวนมากนี้ การแบ่งฐานข้อมูล MySQL อาจใช้งานได้ แต่ฉันขอแนะนำแพลตฟอร์ม VLDB ที่สร้างขึ้นเพื่อการใช้งาน ระบบไม่มีอะไรที่ใช้ร่วมกันยังช่วยให้คุณใช้ดิสก์แนบโดยตรงที่ราคาถูกกว่ามาก - ดูที่แพลตฟอร์ม X4550 (thumper) ของซันเพื่อดูความเป็นไปได้ครั้งเดียว

คุณต้องคิดถึงความต้องการด้านประสิทธิภาพของคุณด้วย

  • เวลาเรียกใช้ที่ยอมรับได้สำหรับแบบสอบถามคืออะไร
  • คุณจะสืบค้นชุดข้อมูลบ่อยแค่ไหน?
  • คำถามส่วนใหญ่สามารถแก้ไขได้โดยใช้ดัชนี (เช่นพวกเขากำลังจะดูเศษส่วนเล็ก ๆ - พูดว่า: น้อยกว่า 1% ของข้อมูล) หรือพวกเขาต้องการสแกนตารางเต็มหรือไม่
  • ข้อมูลจะถูกโหลดเข้าสู่ฐานข้อมูลเร็วแค่ไหน?
  • ข้อความค้นหาของคุณต้องการข้อมูลล่าสุดหรือคุณสามารถใช้ตารางการรายงานที่รีเฟรชเป็นระยะหรือไม่

กล่าวโดยสรุปข้อโต้แย้งที่แข็งแกร่งที่สุดของ MySQL คือคุณจะต้องทำ backflips เพื่อให้ได้ประสิทธิภาพของการสืบค้นที่ดีกว่า 7PB ของข้อมูลหากเป็นไปได้ ปริมาณข้อมูลนี้จะนำคุณเข้าสู่อาณาเขตที่ไม่มีการแชร์เพื่อสร้างสิ่งที่จะสืบค้นได้อย่างรวดเร็วและคุณอาจต้องใช้แพลตฟอร์มที่ออกแบบมาสำหรับการดำเนินการที่ไม่ต้องแชร์สิ่งใด ดิสก์เพียงอย่างเดียวจะทำให้ต้นทุนของแพลตฟอร์ม DBMS สมเหตุสมผล

หมายเหตุ:หากคุณแยกฐานปฏิบัติการและฐานข้อมูลออกคุณไม่จำเป็นต้องใช้แพลตฟอร์ม DBMS เดียวกันสำหรับทั้งคู่ การได้รับการแทรกอย่างรวดเร็วและรายงานย่อยวินาทีจากตาราง 7PB เดียวกันจะเป็นความท้าทายทางเทคนิคอย่างน้อยที่สุด

จากความคิดเห็นของคุณว่าคุณสามารถอยู่กับความล่าช้าในการรายงานคุณอาจพิจารณาระบบการดักจับและการรายงานแยกต่างหากและคุณอาจไม่จำเป็นต้องเก็บข้อมูล 7PB ทั้งหมดไว้ในระบบการจับภาพการทำงานของคุณ พิจารณาแพลตฟอร์มการทำงานเช่น Oracle (MySQL อาจทำกับ InnoDB) สำหรับการเก็บข้อมูล (อีกครั้งต้นทุนของดิสก์เพียงอย่างเดียวจะทำให้ต้นทุนของ DBMS น้อยลงเว้นแต่คุณจะมีผู้ใช้จำนวนมาก ) และแพลตฟอร์ม VLDB เช่นTeradata, Sybase IQ, RedBrick, Netezza (หมายเหตุ: ฮาร์ดแวร์ที่เป็นกรรมสิทธิ์) หรือGreenplumสำหรับการรายงาน


1
@ConcernedOfTunbridgeW - พวกเขาสามารถไปทางนี้ได้ตลอดเวลา: blog.backblaze.com/2009/09/01/… - สนุกมากกว่า SAN มากเพียงต้องการกล่อง 120-130 4U เท่านั้น ... แต่ฉันไม่แน่ใจว่า ' ธุรกิจ 'จะมีความสุข ....
pQd

เป็นหลัก Sun Thumper ในงบประมาณและเป็นตัวอย่างของตัวเลือกสำหรับโหนดในระบบที่ไม่มีอะไรใช้ร่วมกัน ฉันแน่ใจว่าฉันเห็นตัวเลือกอื่นสำหรับสิ่งนี้เช่นกัน แต่ฉันไม่สามารถคิดได้ว่าจะอยู่ที่ไหน คำถามไม่ได้เป็นฮาร์ดแวร์อะไรมาก แต่เป็นแพลตฟอร์มฐานข้อมูล
เกี่ยวข้องกับ

อย่างไรก็ตามผู้สังเกตการณ์ที่กระตือรือร้นจะทราบว่ากล่องแบบแนบใด ๆ แบบตรงนี้มีราคาถูกกว่ามากต่อวัณโรคมากกว่าอะไรที่อิงกับ SAN ซึ่งอย่างน้อยก็มีข้อโต้แย้งสำคัญอย่างน้อยหนึ่งอย่างในความเห็นชอบบางอย่างที่ออกแบบมาเพื่อทำงานบนแพลตฟอร์มที่ไม่มีอะไรร่วมกัน .
กังวล OfTunbridgeWells

@ConcernedOfTunbridgeWells และคุณสามารถเรียกใช้คิวรี / การบำรุงรักษาเหล่านั้นทั้งหมดและสิ่งอื่น ๆ ในแบบคู่ขนานในกล่อง [หิวอย่างอื่นที่กำลังทำงาน]
pQd

1
@ConcernedOfTunbridgeWells - เพื่อตอบคำถามคุณ ... ฉันต้องการแบบสอบถามประมาณ 500 รายการเพื่อส่งกลับภายในไม่กี่วินาทีถ้าเป็นไปได้ ฉันจะทำสิ่งนี้เพียงไม่กี่ร้อยครั้งต่อวัน เมื่อมีการเรียกใช้คิวรีจะต้องสแกนตารางแบบเต็ม นอกจากนี้ INSERT ยังมีลำดับความสำคัญต่ำกว่า SELECT ดังนั้นจึงไม่จำเป็นต้องอยู่ใกล้กับทุกที่ในทันที ฉันสามารถรอสองสามชั่วโมงเพื่อให้ข้อมูล "ใหม่" เข้าสู่ฐานข้อมูลได้
ซาร่าห์

16

หักมัน ที่ขนาดนี้การฆ่าตัวตายเช่นขนาดใหญ่มีหนึ่ง - คิดเกี่ยวกับการคืนค่าการสำรองข้อมูลที่เป็นไปได้ความเสียหายของพื้นที่ตารางเพิ่มคอลัมน์ใหม่หรือกระบวนการ 'การรักษาบ้าน' อื่น ๆ - ทั้งหมดที่เป็นไปไม่ได้ที่จะทำในเวลาที่เหมาะสมในระดับนี้

ด้านหลังของการคำนวณซองจดหมายง่าย ๆ โดยสมมติว่าเป็นจำนวนเต็ม 32 บิตสำหรับคอลัมน์ทั้งหมดยกเว้นรหัส 64 บิต ไม่มีดัชนีรวม:

8 * 4B + 8B = 40B ต่อแถว [และนี่เป็นแง่ดีมาก]

192 ล้านล้านแถว 40B ให้เกือบ 7 PB

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

คำถามที่จะตอบ:

  • อะไรคือการหยุดทำงานที่ยอมรับได้ในกรณีที่ระบบล่ม / รีบูต?
  • สิ่งที่สามารถหยุดทำงานได้เมื่อคุณต้องการกู้คืนข้อมูลสำรองหรือดึงเซิร์ฟเวอร์ออกจากการผลิตเพื่อการบำรุงรักษาตามแผน
  • คุณต้องการสำรองข้อมูลบ่อยแค่ไหนและที่ไหน?

ลิงค์แบบสุ่ม - ความเร็วของเม็ดมีด:


ฉันเห็นด้วย - 7PB ค่อนข้างหนัก ฉันชอบคิดใหม่อีกครั้งและหาทางออกที่เบากว่า แต่ฉันต้องการค้นหาพบการมีอยู่ (หรือไม่มีอยู่) ของการรวมกันโดยเฉพาะของเขตข้อมูล p การแยกตารางออกจากใจของฉัน - มันมีเหตุผลมากกว่า แต่ก็หมายความว่าฉันได้รับแบบสอบถามในแต่ละตาราง หากคุณสนใจคุณจะแบ่งตารางออกเป็นกี่ตาราง
Sarah

5
@Sarah - ฉันไม่เพียง แต่จะแนะนำให้แยกออกเป็นตาราง แต่ยังรวมถึงเครื่องจักร คุณสามารถเรียกใช้แบบสอบถามของคุณในแบบคู่ขนานเพื่อเพิ่มประสิทธิภาพ [ฉันทำมันในขนาดเล็ก] สิ่งที่เกี่ยวกับความเสียหายของระบบไฟล์หรือแม้กระทั่งการตรวจสอบตามปกติหลังจากรีบูตเซิร์ฟเวอร์? ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดยการหาชุดค่าผสมที่เฉพาะเจาะจง ... การจัดเก็บค่าคีย์แบบง่ายอาจช่วยได้ ขนาดตาราง - ไม่เกินสองสาม GB ข้อมูลบนเซิร์ฟเวอร์เดียว - ไม่เกินสองสาม TB ดูstackoverflow.com/questions/654594เพื่อทราบว่าปวดหัวที่คาดหวังในระดับที่เล็กมาก; ใช้ innodb_file_per_table
pQd


2

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


เสียงที่น่าสนใจ แต่ผมสามารถอยู่กับเชิงลบเท็จ - แต่ไม่ได้บวกเท็จ :)
ซาร่าห์

2

แก้ไข: จริง ๆ แล้วถ้ามันเป็นเพียงแค่การมีอยู่หรือไม่ของ "บันทึก" ที่ตำแหน่ง X ในช่วงของจำนวนเต็มคุณสามารถกำจัด datastore และเพียงแค่ใช้บิตแมป ... ดังนั้น 10 หรือมากกว่านั้นเครื่องที่มีพื้นที่ดิสก์ 100 TB (ดังนั้นคุณมีบิตแมป 10 สำเนาสำหรับประสิทธิภาพและการสำรองข้อมูล) และถ้าคุณทำ RAM ขนาด 128GB ต่อเซิร์ฟเวอร์คุณสามารถใส่ดัชนีกลุ่มบล็อกบล็อกความละเอียดสูงระดับสูงสุดในหน่วยความจำเพื่อทำการตรวจสอบครั้งแรกก่อนกดดิสก์ X บิต 26 Quadrillion .

ฉันจะไปหาตัวเลือก # 2 หากคุณ:

375 เครื่องที่มี 64TB (32 2TB ไดรฟ์) แต่ละเครื่อง (สมจริง 400 เครื่องสำหรับความล้มเหลว) จากนั้นเพียงแมประเบียนไปยัง ZVOL ที่มีขนาด 2TB จากนั้นบนเซิร์ฟเวอร์ดัชนีอย่างน้อยหนึ่งรายการให้เก็บไว้ในอาร์เรย์ Judy หรืออาร์เรย์ critbit หรือเพียงบิตแมปธรรมดาซึ่งเป็นการแมปหากคุณได้เพิ่มระเบียนไปยังตำแหน่ง 1 จาก 26 Quadrillion ดัชนีจะอยู่ระหว่าง 50 ถึง 100TB และคุณสามารถมีดัชนีระดับที่สองบ่งบอกได้หากมีการบันทึกใด ๆ ที่เขียนไปยังบล็อกที่อยู่ 64k ที่แน่นอนซึ่งจะพอดีกับ RAM น้อยกว่า 64 GB และจะให้การตรวจสอบเริ่มต้นอย่างรวดเร็ว หาก "ละแวกใกล้เคียง" บางอย่างว่างเปล่าหรือไม่

จากนั้นให้อ่านเรคคอร์ดนั้นก่อนอื่นคุณต้องตรวจสอบว่ามีเร็กคอร์ดให้ค้นหาหรือไม่โดยดูที่ดัชนี หากมีอยู่ให้ไปที่ machine # (X) / ZOL # (Y) บนเครื่อง / ตำแหน่งการบันทึก # (Z) ภายใน 2TB blob นั้นตามการคำนวณดัชนีอย่างง่าย การค้นหาระเบียนเดียวจะเร็วมากและคุณสามารถทดสอบการโหลดบางส่วนของที่เก็บข้อมูลลงใน dbs ที่แตกต่างกัน (ในขณะที่คุณใช้ที่เก็บข้อมูลสำหรับการทำงานจริง) และทำการทดสอบประสิทธิภาพเพื่อดูว่าพวกเขาสามารถรองรับฐานข้อมูลทั้งหมดของคุณหรือไม่ เพียงใช้แหล่งข้อมูลด้วยวิธีนั้น

ZOL เป็นสิ่ง ZFS ที่อาจนึกถึงไฟล์ที่กระจัดกระจายในระบบไฟล์อื่น ๆ ดังนั้นสิ่งที่คล้ายกันจะนำไปใช้ หรือคุณสามารถทำดัชนีไปยังหมายเลขไบต์ที่แน่นอนบนดิสก์ แต่สิ่งนี้จะยุ่งยากหากดิสก์มีขนาดแตกต่างกันถ้าคุณไม่กำหนดจำนวนไบต์ที่ใช้ต่อดิสก์ในระดับที่เหมาะกับดิสก์ทั้งหมด - เช่น 1.75TB ต่อดิสก์ 2TB . หรือสร้าง metadevices ที่มีขนาดคงที่เป็นต้น


สวัสดีซาร่าห์ - ไม่แน่ใจว่าคุณยังคงทำสิ่งนี้อยู่หรือไม่ แต่ถ้าคุณต้องการความช่วยเหลือฉันสามารถสร้างต้นแบบความคิดของฉันให้กับคุณบนเครื่อง 100TB และยินดีที่จะเป็นเจ้าภาพ (ที่ศูนย์ข้อมูลหลักของสหรัฐอเมริกา) และจัดการกลุ่ม เครื่อง 400-500 เครื่องตามต้องการ BTW คุณเคยทำงานที่ CNET ใน SF หรือไม่?

1

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

http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/

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

นอกจากนี้หากคุณใช้ MyISAM และ / หรือไฟล์ InnoDB ต่อตารางคุณสามารถตรวจสอบการสร้างจุดเมานต์ระบบไฟล์ที่แตกต่างกันสำหรับ / var / lib / mysql ที่ปรับขนาดบล็อกให้เล็กลงและปรับพารามิเตอร์ fs-type เช่น ext3 / ext4 / resiserfs คุณสามารถใช้ data = writeback สำหรับเจอร์นัลและปิดใช้งานการอัพเดตเวลาเข้าถึงบนระบบไฟล์สำหรับความเร็ว I / O


1
ดูเหมือนว่า myisam จะไม่เกิดปัญหาเนื่องจากข้อกำหนดในการทำธุรกรรม
pQd

0

สำหรับตัวเลือกที่สองจะมีการใส่ตัวเลขจำนวนเท่าใด

หากจะมีเพียงหนึ่งในพันหรือ 10K, 100K ฯลฯ ดังนั้นการเก็บช่วงของหมายเลขที่ใช้ (หรือไม่ได้ใช้) สามารถบันทึกรายการได้หลายล้านล้านรายการ เช่น: การจัดเก็บ ('ฟรี', 0,100000), ('ถ่าย', 100000,100003), ('ฟรี', 10,0004,584234) - แยกแถวออกเป็นสองหรือสามแถวตามต้องการและการสร้างดัชนีในหมายเลขแรก ค้นหา x <= {เข็ม} เพื่อดูว่ามีการค้นหาช่วงที่มีหมายเลขค้นหาหรือไม่

คุณอาจไม่ต้องการสถานะทั้งคู่ เพียงเก็บสถานะใดก็ตามที่มีโอกาสน้อยที่สุด

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