หากคุณใช้ globals ในการแก้ปัญหาที่พวกเขาเก่งจริงๆ คุณก็จะสามารถบรรลุผลลัพธ์ที่โดดเด่นได้ ทั้งในด้านการผลิตหรือในการลดความซับซ้อนของการแก้ปัญหา (
Globals เป็นวิธีพิเศษในการจัดเก็บและประมวลผลข้อมูล แตกต่างอย่างสิ้นเชิงจากตารางใน SQL พวกเขาปรากฏในปี 1966 ในภาษา
Globals ใน DBMS สมัยใหม่รองรับธุรกรรม การบันทึก การจำลองแบบ และการแบ่งพาร์ติชัน เหล่านั้น. สามารถใช้เพื่อสร้างระบบที่ทันสมัย เชื่อถือได้ กระจายตัว และรวดเร็ว
Globals ไม่ได้จำกัดคุณอยู่เพียงโมเดลเชิงสัมพันธ์เท่านั้น สิ่งเหล่านี้ให้อิสระแก่คุณในการพัฒนาโครงสร้างข้อมูลที่ปรับให้เหมาะสมสำหรับงานเฉพาะ สำหรับแอปพลิเคชันจำนวนมาก การใช้ globals อย่างชาญฉลาดสามารถเป็นอาวุธลับได้อย่างแท้จริง โดยมอบประสิทธิภาพที่นักพัฒนาแอปพลิเคชันเชิงสัมพันธ์สามารถฝันถึงได้เท่านั้น
Globals เป็นวิธีการจัดเก็บข้อมูลสามารถใช้ได้ในภาษาโปรแกรมสมัยใหม่หลายภาษา ทั้งระดับสูงและระดับต่ำ ดังนั้นในบทความนี้ ผมจะเน้นไปที่เรื่องโกลบอลโดยเฉพาะ ไม่ใช่ภาษาที่มันเคยมีมา
2. วิธีการทำงานของโกลบอล
ก่อนอื่นมาทำความเข้าใจกันก่อนว่า globals ทำงานอย่างไรและมีจุดแข็งอะไรบ้าง Globals สามารถมองได้จากมุมมองที่ต่างกัน ในส่วนนี้ของบทความนี้ เราจะมองพวกมันเหมือนเป็นต้นไม้ หรือเหมือนกับคลังข้อมูลแบบลำดับชั้น
พูดง่ายๆ ก็คือ global คืออาเรย์แบบถาวร อาร์เรย์ที่บันทึกลงดิสก์โดยอัตโนมัติ
เป็นการยากที่จะจินตนาการถึงสิ่งที่ง่ายกว่าในการจัดเก็บข้อมูล ในโค้ด (ในภาษา COS/M) จะแตกต่างจากอาเรย์เชื่อมโยงปกติในสัญลักษณ์เท่านั้น ^ ก่อนชื่อ
หากต้องการบันทึกข้อมูลในระดับโลกคุณไม่จำเป็นต้องเรียนรู้ภาษาคิวรี SQL คำสั่งสำหรับการทำงานกับพวกเขานั้นง่ายมาก สามารถเรียนรู้ได้ภายในหนึ่งชั่วโมง
เริ่มจากตัวอย่างที่ง่ายที่สุดกันก่อน ต้นไม้ชั้นเดียวมี 2 กิ่ง ตัวอย่างเขียนด้วย COS
Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"
เมื่อแทรกข้อมูลลงในโกลบอล (คำสั่ง Set) 3 สิ่งจะเกิดขึ้นโดยอัตโนมัติ:
- การบันทึกข้อมูลลงดิสก์
- การจัดทำดัชนี สิ่งที่อยู่ในวงเล็บคือกุญแจ (ในวรรณคดีอังกฤษ - "ตัวห้อย") และทางด้านขวาของเท่ากับคือค่า ("ค่าโหนด")
- การเรียงลำดับ ข้อมูลจะถูกจัดเรียงตามคีย์ ในอนาคต เมื่อเคลื่อนที่ผ่านอาร์เรย์ องค์ประกอบแรกจะเป็น "Sergey Smith" และองค์ประกอบที่สองคือ "John Sidorov" เมื่อได้รับรายชื่อผู้ใช้จากทั่วโลกฐานข้อมูลก็ไม่เสียเวลาในการเรียงลำดับ ยิ่งไปกว่านั้น คุณสามารถร้องขอเอาต์พุตของรายการที่เรียงลำดับ โดยเริ่มต้นจากคีย์ใดก็ได้ แม้แต่คีย์ที่ไม่มีอยู่จริง (เอาต์พุตจะเริ่มต้นจากคีย์จริงตัวแรก ซึ่งมาหลังจากคีย์ที่ไม่มีอยู่จริง)
การดำเนินการทั้งหมดนี้เกิดขึ้นอย่างรวดเร็วอย่างไม่น่าเชื่อ ในคอมพิวเตอร์ที่บ้านของฉัน ฉันได้รับค่าสูงสุดถึง 750 เม็ดมีด/วินาทีในกระบวนการเดียว บนโปรเซสเซอร์แบบมัลติคอร์ค่าต่างๆ สามารถเข้าถึงได้
แน่นอนว่าความเร็วในการแทรกนั้นไม่ได้พูดอะไรมาก ตัวอย่างเช่น คุณสามารถเขียนข้อมูลลงในไฟล์ข้อความได้อย่างรวดเร็ว เช่นนี้
- จุดแข็งที่ใหญ่ที่สุดของ 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
เห็นได้ชัดว่าต้นไม้หลายระดับสามารถสร้างได้จากโกลบอล ยิ่งไปกว่านั้น การเข้าถึงโหนดใดๆ ก็ตามทำได้เกือบจะในทันทีเนื่องจากการจัดทำดัชนีอัตโนมัติระหว่างการแทรก และที่ระดับใดของต้นไม้ กิ่งก้านทั้งหมดจะถูกจัดเรียงตามคีย์
อย่างที่คุณเห็น ข้อมูลสามารถจัดเก็บได้ทั้งในคีย์และค่า ความยาวคีย์ทั้งหมด (ผลรวมของความยาวของดัชนีทั้งหมด) สามารถเข้าถึงได้
อีกจุดที่น่าสนใจ คุณสามารถสร้างต้นไม้ได้โดยไม่ต้องระบุค่าของโหนดระดับบน
Set ^b("a", "b", "c", "d") = 1
Set ^b("a", "b", "c", "e") = 2
Set ^b("a", "b", "f", "g") = 3
วงกลมว่างคือโหนดที่ไม่มีการกำหนดค่า
เพื่อให้เข้าใจโลกได้ดีขึ้น ลองเปรียบเทียบกับต้นไม้อื่นๆ: ต้นไม้ในสวน และต้นไม้ชื่อระบบไฟล์
ลองเปรียบเทียบต้นไม้บนโลกกับโครงสร้างลำดับชั้นที่เราคุ้นเคยที่สุด: กับต้นไม้ธรรมดาที่เติบโตในสวนและทุ่งนา รวมถึงกับระบบไฟล์
ดังที่เราเห็นตามต้นไม้ในสวน ใบไม้และผลจะพบได้เฉพาะที่ปลายกิ่งเท่านั้น
ระบบไฟล์ - ข้อมูลจะถูกเก็บไว้ที่ส่วนท้ายของสาขาเท่านั้น ซึ่งเป็นชื่อไฟล์ที่มีคุณสมบัติครบถ้วน
และนี่คือโครงสร้างข้อมูลทั่วโลก
ความแตกต่าง:
- โหนดภายใน: ข้อมูลใน global สามารถจัดเก็บได้ในทุก node ไม่ใช่แค่ที่ปลายสาขาเท่านั้น
- โหนดภายนอก: โลกจะต้องมีการกำหนดค่าที่ปลายกิ่ง ในขณะที่ FS และต้นไม้ในสวนไม่ได้กำหนดไว้
ในแง่ของโหนดภายใน เราสามารถพูดได้ว่าโครงสร้างของโกลบอลนั้นเป็นส่วนเสริมของโครงสร้างของเนมทรีในระบบไฟล์และทรีสวน เหล่านั้น. มีความยืดหยุ่นมากขึ้น
โดยทั่วไปทั่วโลกนั้น Order tree พร้อมความสามารถในการจัดเก็บข้อมูลในแต่ละโหนด.
เพื่อให้เข้าใจการทำงานของ globals ได้ดีขึ้น ลองจินตนาการว่าจะเกิดอะไรขึ้นหากผู้สร้างระบบไฟล์ใช้แนวทางที่คล้ายกับ globals ในการจัดเก็บข้อมูล
- การลบไฟล์เดียวในไดเร็กทอรีจะเป็นการลบไดเร็กทอรีนั้นโดยอัตโนมัติ เช่นเดียวกับไดเร็กทอรีที่วางซ้อนทั้งหมดที่มีเพียงไดเร็กทอรีเดียวที่เพิ่งลบไป
- จะไม่จำเป็นต้องมีไดเรกทอรี จะมีเพียงไฟล์ที่มีไฟล์ย่อยและไฟล์ที่ไม่มีไฟล์ย่อย หากเปรียบกับต้นไม้ธรรมดา แต่ละกิ่งก็จะกลายเป็นผลไม้
- ไฟล์ต่างๆ เช่น ไฟล์ README.txt อาจไม่จำเป็น ทุกสิ่งที่ต้องกล่าวถึงเกี่ยวกับเนื้อหาของไดเร็กทอรีสามารถเขียนลงในไฟล์ไดเร็กทอรีได้ ในพื้นที่พาธ ชื่อไฟล์จะแยกไม่ออกจากชื่อไดเร็กทอรี ดังนั้นจึงเป็นไปได้ที่จะเข้าถึงโดยใช้เพียงไฟล์เท่านั้น
- ความเร็วในการลบไดเร็กทอรีที่มีไดเร็กทอรีย่อยและไฟล์ที่ซ้อนกันจะเพิ่มขึ้นอย่างมาก หลายครั้งในHabré มีบทความเกี่ยวกับระยะเวลาและความยากลำบากในการลบไฟล์ขนาดเล็กหลายล้านไฟล์ (
1 ,2 ). อย่างไรก็ตาม หากคุณสร้างระบบไฟล์หลอกบนโกลบอล ระบบจะใช้เวลาไม่กี่วินาทีหรือเป็นเศษส่วน เมื่อฉันทดสอบการลบทรีย่อยบนคอมพิวเตอร์ที่บ้าน มันจะลบ 1-96 ล้านโหนดออกจากทรีสองชั้นบน HDD (ไม่ใช่ SSD) ใน 341 วินาที ยิ่งไปกว่านั้น เรากำลังพูดถึงการลบส่วนหนึ่งของแผนผัง ไม่ใช่แค่ไฟล์ทั้งหมดที่มี globals
การลบทรีย่อยเป็นอีกจุดแข็งของโกลบอล คุณไม่จำเป็นต้องเรียกซ้ำสำหรับสิ่งนี้ สิ่งนี้เกิดขึ้นอย่างรวดเร็วอย่างไม่น่าเชื่อ
ในแผนผังของเราสามารถทำได้ด้วยคำสั่ง ฆ่า.
Kill ^a("+7926X")
เพื่อความเข้าใจที่ดีขึ้นว่าการดำเนินการใดบ้างที่สามารถทำได้ในระดับโลก ฉันจะจัดทำตารางสั้นๆ
คำสั่งและฟังก์ชันพื้นฐานสำหรับการทำงานกับ globals ใน COS
การตั้งค่าสาขาเป็นโหนด (หากยังไม่ได้กำหนด) และค่าโหนด
การคัดลอกทรีย่อย
การลบทรีย่อย
การลบค่าของโหนดเฉพาะ ทรีย่อยที่โผล่ออกมาจากโหนดไม่ได้รับการสัมผัส
ทะลุต้นไม้เข้าไปลึกเข้าไปในต้นไม้
การข้ามสาขาของโหนดเฉพาะ
ตรวจสอบว่ามีการกำหนดโหนดหรือไม่
การเพิ่มค่าโหนดแบบอะตอมมิก เพื่อหลีกเลี่ยงการอ่านและเขียนสำหรับกรด ล่าสุดมีแนะนำให้เปลี่ยนมาใช้
ขอบคุณสำหรับความสนใจของคุณ เราพร้อมที่จะตอบคำถามของคุณ
ข้อจำกัดความรับผิดชอบ: บทความนี้และความคิดเห็นของฉันเป็นความคิดเห็นของฉัน และไม่เกี่ยวข้องกับตำแหน่งอย่างเป็นทางการของ InterSystems Corporation
นามสกุล
ที่มา: will.com