Globals เป็นดาบสมบัติสำหรับการจัดเก็บข้อมูล ต้นไม้. ส่วนที่ 1

Globals เป็นดาบสมบัติสำหรับการจัดเก็บข้อมูล ต้นไม้. ส่วนที่ 1 ดาบฐานข้อมูลจริง - globals - เป็นที่รู้จักกันมานานแล้ว แต่ก็ยังน้อยคนที่รู้วิธีใช้อย่างมีประสิทธิภาพหรือไม่ได้เป็นเจ้าของ superweapon นี้เลย

หากคุณใช้ globals ในการแก้ปัญหาที่พวกเขาเก่งจริงๆ คุณก็จะสามารถบรรลุผลลัพธ์ที่โดดเด่นได้ ทั้งในด้านการผลิตหรือในการลดความซับซ้อนของการแก้ปัญหา (1, 2).

Globals เป็นวิธีพิเศษในการจัดเก็บและประมวลผลข้อมูล แตกต่างอย่างสิ้นเชิงจากตารางใน SQL พวกเขาปรากฏในปี 1966 ในภาษา คางทูม) (การพัฒนาเชิงวิวัฒนาการ - แคช ObjectScript(ซึ่งต่อไปนี้จะเรียกว่า COS) ในฐานข้อมูลทางการแพทย์และยังคงมีอยู่ ใช้อย่างแข็งขันและยังเจาะลึกเข้าไปในบางด้านที่ต้องการความน่าเชื่อถือและประสิทธิภาพสูง: การเงิน การค้าขาย ฯลฯ

Globals ใน DBMS สมัยใหม่รองรับธุรกรรม การบันทึก การจำลองแบบ และการแบ่งพาร์ติชัน เหล่านั้น. สามารถใช้เพื่อสร้างระบบที่ทันสมัย ​​เชื่อถือได้ กระจายตัว และรวดเร็ว

Globals ไม่ได้จำกัดคุณอยู่เพียงโมเดลเชิงสัมพันธ์เท่านั้น สิ่งเหล่านี้ให้อิสระแก่คุณในการพัฒนาโครงสร้างข้อมูลที่ปรับให้เหมาะสมสำหรับงานเฉพาะ สำหรับแอปพลิเคชันจำนวนมาก การใช้ globals อย่างชาญฉลาดสามารถเป็นอาวุธลับได้อย่างแท้จริง โดยมอบประสิทธิภาพที่นักพัฒนาแอปพลิเคชันเชิงสัมพันธ์สามารถฝันถึงได้เท่านั้น

Globals เป็นวิธีการจัดเก็บข้อมูลสามารถใช้ได้ในภาษาโปรแกรมสมัยใหม่หลายภาษา ทั้งระดับสูงและระดับต่ำ ดังนั้นในบทความนี้ ผมจะเน้นไปที่เรื่องโกลบอลโดยเฉพาะ ไม่ใช่ภาษาที่มันเคยมีมา

2. วิธีการทำงานของโกลบอล

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

พูดง่ายๆ ก็คือ global คืออาเรย์แบบถาวร อาร์เรย์ที่บันทึกลงดิสก์โดยอัตโนมัติ
เป็นการยากที่จะจินตนาการถึงสิ่งที่ง่ายกว่าในการจัดเก็บข้อมูล ในโค้ด (ในภาษา COS/M) จะแตกต่างจากอาเรย์เชื่อมโยงปกติในสัญลักษณ์เท่านั้น ^ ก่อนชื่อ

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

เริ่มจากตัวอย่างที่ง่ายที่สุดกันก่อน ต้นไม้ชั้นเดียวมี 2 กิ่ง ตัวอย่างเขียนด้วย COS

Globals เป็นดาบสมบัติสำหรับการจัดเก็บข้อมูล ต้นไม้. ส่วนที่ 1

Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"



เมื่อแทรกข้อมูลลงในโกลบอล (คำสั่ง Set) 3 สิ่งจะเกิดขึ้นโดยอัตโนมัติ:

  1. การบันทึกข้อมูลลงดิสก์
  2. การจัดทำดัชนี สิ่งที่อยู่ในวงเล็บคือกุญแจ (ในวรรณคดีอังกฤษ - "ตัวห้อย") และทางด้านขวาของเท่ากับคือค่า ("ค่าโหนด")
  3. การเรียงลำดับ ข้อมูลจะถูกจัดเรียงตามคีย์ ในอนาคต เมื่อเคลื่อนที่ผ่านอาร์เรย์ องค์ประกอบแรกจะเป็น "Sergey Smith" และองค์ประกอบที่สองคือ "John Sidorov" เมื่อได้รับรายชื่อผู้ใช้จากทั่วโลกฐานข้อมูลก็ไม่เสียเวลาในการเรียงลำดับ ยิ่งไปกว่านั้น คุณสามารถร้องขอเอาต์พุตของรายการที่เรียงลำดับ โดยเริ่มต้นจากคีย์ใดก็ได้ แม้แต่คีย์ที่ไม่มีอยู่จริง (เอาต์พุตจะเริ่มต้นจากคีย์จริงตัวแรก ซึ่งมาหลังจากคีย์ที่ไม่มีอยู่จริง)

การดำเนินการทั้งหมดนี้เกิดขึ้นอย่างรวดเร็วอย่างไม่น่าเชื่อ ในคอมพิวเตอร์ที่บ้านของฉัน ฉันได้รับค่าสูงสุดถึง 750 เม็ดมีด/วินาทีในกระบวนการเดียว บนโปรเซสเซอร์แบบมัลติคอร์ค่าต่างๆ สามารถเข้าถึงได้ นับสิบล้าน ส่วนแทรก/วินาที

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

Globals เป็นดาบสมบัติสำหรับการจัดเก็บข้อมูล ต้นไม้. ส่วนที่ 1

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

มาเพิ่มสาขาของระดับที่สองและสามอีกสองสามสาขาในระดับโลก

Set ^a("+7926X", "city") = "Moscow"
Set ^a("+7926X", "city", "street") = "Req Square"
Set ^a("+7926X", "age") = 25
Set ^a("+7916Y", "city") = "London"
Set ^a("+7916Y", "city", "street") = "Baker Street"
Set ^a("+7916Y", "age") = 36

Globals เป็นดาบสมบัติสำหรับการจัดเก็บข้อมูล ต้นไม้. ส่วนที่ 1

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

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

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

Globals เป็นดาบสมบัติสำหรับการจัดเก็บข้อมูล ต้นไม้. ส่วนที่ 1

Set ^b("a", "b", "c", "d") = 1
Set ^b("a", "b", "c", "e") = 2
Set ^b("a", "b", "f", "g") = 3

วงกลมว่างคือโหนดที่ไม่มีการกำหนดค่า

เพื่อให้เข้าใจโลกได้ดีขึ้น ลองเปรียบเทียบกับต้นไม้อื่นๆ: ต้นไม้ในสวน และต้นไม้ชื่อระบบไฟล์

ลองเปรียบเทียบต้นไม้บนโลกกับโครงสร้างลำดับชั้นที่เราคุ้นเคยที่สุด: กับต้นไม้ธรรมดาที่เติบโตในสวนและทุ่งนา รวมถึงกับระบบไฟล์

Globals เป็นดาบสมบัติสำหรับการจัดเก็บข้อมูล ต้นไม้. ส่วนที่ 1

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

และนี่คือโครงสร้างข้อมูลทั่วโลก

Globals เป็นดาบสมบัติสำหรับการจัดเก็บข้อมูล ต้นไม้. ส่วนที่ 1ความแตกต่าง:

  1. โหนดภายใน: ข้อมูลใน global สามารถจัดเก็บได้ในทุก node ไม่ใช่แค่ที่ปลายสาขาเท่านั้น
  2. โหนดภายนอก: โลกจะต้องมีการกำหนดค่าที่ปลายกิ่ง ในขณะที่ FS และต้นไม้ในสวนไม่ได้กำหนดไว้



ในแง่ของโหนดภายใน เราสามารถพูดได้ว่าโครงสร้างของโกลบอลนั้นเป็นส่วนเสริมของโครงสร้างของเนมทรีในระบบไฟล์และทรีสวน เหล่านั้น. มีความยืดหยุ่นมากขึ้น

โดยทั่วไปทั่วโลกนั้น Order tree พร้อมความสามารถในการจัดเก็บข้อมูลในแต่ละโหนด.

เพื่อให้เข้าใจการทำงานของ globals ได้ดีขึ้น ลองจินตนาการว่าจะเกิดอะไรขึ้นหากผู้สร้างระบบไฟล์ใช้แนวทางที่คล้ายกับ globals ในการจัดเก็บข้อมูล

  1. การลบไฟล์เดียวในไดเร็กทอรีจะเป็นการลบไดเร็กทอรีนั้นโดยอัตโนมัติ เช่นเดียวกับไดเร็กทอรีที่วางซ้อนทั้งหมดที่มีเพียงไดเร็กทอรีเดียวที่เพิ่งลบไป
  2. จะไม่จำเป็นต้องมีไดเรกทอรี จะมีเพียงไฟล์ที่มีไฟล์ย่อยและไฟล์ที่ไม่มีไฟล์ย่อย หากเปรียบกับต้นไม้ธรรมดา แต่ละกิ่งก็จะกลายเป็นผลไม้

    Globals เป็นดาบสมบัติสำหรับการจัดเก็บข้อมูล ต้นไม้. ส่วนที่ 1

  3. ไฟล์ต่างๆ เช่น ไฟล์ README.txt อาจไม่จำเป็น ทุกสิ่งที่ต้องกล่าวถึงเกี่ยวกับเนื้อหาของไดเร็กทอรีสามารถเขียนลงในไฟล์ไดเร็กทอรีได้ ในพื้นที่พาธ ชื่อไฟล์จะแยกไม่ออกจากชื่อไดเร็กทอรี ดังนั้นจึงเป็นไปได้ที่จะเข้าถึงโดยใช้เพียงไฟล์เท่านั้น
  4. ความเร็วในการลบไดเร็กทอรีที่มีไดเร็กทอรีย่อยและไฟล์ที่ซ้อนกันจะเพิ่มขึ้นอย่างมาก หลายครั้งในHabré มีบทความเกี่ยวกับระยะเวลาและความยากลำบากในการลบไฟล์ขนาดเล็กหลายล้านไฟล์ (1, 2). อย่างไรก็ตาม หากคุณสร้างระบบไฟล์หลอกบนโกลบอล ระบบจะใช้เวลาไม่กี่วินาทีหรือเป็นเศษส่วน เมื่อฉันทดสอบการลบทรีย่อยบนคอมพิวเตอร์ที่บ้าน มันจะลบ 1-96 ล้านโหนดออกจากทรีสองชั้นบน HDD (ไม่ใช่ SSD) ใน 341 วินาที ยิ่งไปกว่านั้น เรากำลังพูดถึงการลบส่วนหนึ่งของแผนผัง ไม่ใช่แค่ไฟล์ทั้งหมดที่มี globals

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

ในแผนผังของเราสามารถทำได้ด้วยคำสั่ง ฆ่า.

Kill ^a("+7926X")

Globals เป็นดาบสมบัติสำหรับการจัดเก็บข้อมูล ต้นไม้. ส่วนที่ 1

เพื่อความเข้าใจที่ดีขึ้นว่าการดำเนินการใดบ้างที่สามารถทำได้ในระดับโลก ฉันจะจัดทำตารางสั้นๆ

คำสั่งและฟังก์ชันพื้นฐานสำหรับการทำงานกับ globals ใน COS

ชุด
การตั้งค่าสาขาเป็นโหนด (หากยังไม่ได้กำหนด) และค่าโหนด

ผสาน
การคัดลอกทรีย่อย

ฆ่า
การลบทรีย่อย

ซีคิล
การลบค่าของโหนดเฉพาะ ทรีย่อยที่โผล่ออกมาจากโหนดไม่ได้รับการสัมผัส

$แบบสอบถาม
ทะลุต้นไม้เข้าไปลึกเข้าไปในต้นไม้

$สั่งซื้อ
การข้ามสาขาของโหนดเฉพาะ

$ข้อมูล
ตรวจสอบว่ามีการกำหนดโหนดหรือไม่

$เพิ่มขึ้น
การเพิ่มค่าโหนดแบบอะตอมมิก เพื่อหลีกเลี่ยงการอ่านและเขียนสำหรับกรด ล่าสุดมีแนะนำให้เปลี่ยนมาใช้ $ลำดับ

ขอบคุณสำหรับความสนใจของคุณ เราพร้อมที่จะตอบคำถามของคุณ

ข้อจำกัดความรับผิดชอบ: บทความนี้และความคิดเห็นของฉันเป็นความคิดเห็นของฉัน และไม่เกี่ยวข้องกับตำแหน่งอย่างเป็นทางการของ InterSystems Corporation

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

ที่มา: will.com

เพิ่มความคิดเห็น