Q Language - ตารางบนดิสก์
ข้อมูลในฮาร์ดดิสก์ของคุณ (เรียกอีกอย่างว่าฐานข้อมูลในอดีต) สามารถบันทึกได้ในสามรูปแบบที่แตกต่างกัน ได้แก่ Flat Files, Splayed Tables และ Partitioned Tables ที่นี่เราจะเรียนรู้วิธีใช้รูปแบบทั้งสามนี้เพื่อบันทึกข้อมูล
ไฟล์แบน
ไฟล์แบบแบนจะถูกโหลดลงในหน่วยความจำอย่างเต็มที่ซึ่งเป็นสาเหตุที่ขนาด (รอยเท้าหน่วยความจำ) ควรมีขนาดเล็ก ตารางจะถูกบันทึกไว้ในดิสก์ทั้งหมดในไฟล์เดียว (ขนาดจึงมีความสำคัญ)
ฟังก์ชันที่ใช้จัดการตารางเหล่านี้คือ set/get -
`:path_to_file/filename set tablename
ลองดูตัวอย่างเพื่อสาธิตวิธีการทำงาน -
q)tables `.
`s#`t`tab`tab1
q)`:c:/q/w32/tab1_test set tab1
`:c:/q/w32/tab1_test
ในสภาพแวดล้อม Windows ไฟล์แบบแบนจะถูกบันทึกไว้ที่ตำแหน่ง - C:\q\w32
รับไฟล์แบบแบนจากดิสก์ของคุณ (ฐานข้อมูลประวัติ) และใช้ไฟล์ get คำสั่งดังนี้ -
q)tab2: get `:c:/q/w32/tab1_test
q)tab2
sym | time price size
--------- | -------------------------------
APPLE | 11:16:39.779 8.388858 12
MSFT | 11:16:39.779 19.59907 10
IBM | 11:16:39.779 37.5638 1
SAMSUNG | 11:16:39.779 61.37452 90
APPLE | 11:16:39.779 52.94808 73
มีการสร้างตารางใหม่ tab2 ด้วยเนื้อหาที่เก็บไว้ใน tab1_test ไฟล์.
ตารางการเล่น
หากมีคอลัมน์มากเกินไปในตารางเราจะจัดเก็บตารางดังกล่าวในรูปแบบแยกส่วนกล่าวคือเราบันทึกลงในดิสก์ในไดเร็กทอรี ภายในไดเร็กทอรีแต่ละคอลัมน์จะถูกบันทึกในไฟล์แยกต่างหากภายใต้ชื่อเดียวกับชื่อคอลัมน์ แต่ละคอลัมน์จะถูกบันทึกเป็นรายการประเภทที่เกี่ยวข้องในไฟล์ไบนารี kdb +
การบันทึกตารางในรูปแบบ splayed มีประโยชน์มากเมื่อเราต้องเข้าถึงคอลัมน์เพียงไม่กี่คอลัมน์บ่อยๆจากหลาย ๆ คอลัมน์ ไดเรกทอรีตารางแยกประกอบด้วย.d ไฟล์ไบนารีซึ่งมีลำดับของคอลัมน์
เช่นเดียวกับไฟล์แบนตารางสามารถบันทึกเป็นสเปรย์ได้โดยใช้ไฟล์ setคำสั่ง ในการบันทึกตารางเป็นสเปรย์พา ธ ไฟล์ควรลงท้ายด้วยแบ็กแลช -
`:path_to_filename/filename/ set tablename
สำหรับการอ่านตารางแบบแยกส่วนเราสามารถใช้ไฟล์ get ฟังก์ชัน -
tablename: get `:path_to_file/filename
Note - สำหรับตารางที่จะบันทึกเป็นสเปรย์ควรยกเลิกการใส่คีย์และระบุ
ในสภาพแวดล้อม Windows โครงสร้างไฟล์ของคุณจะปรากฏดังนี้ -
ตารางที่แบ่งพาร์ติชัน
ตารางที่แบ่งพาร์ติชันเป็นวิธีที่มีประสิทธิภาพในการจัดการตารางขนาดใหญ่ที่มีข้อมูลจำนวนมาก ตารางที่แบ่งพาร์ติชั่นคือตารางแยกส่วนที่กระจายไปทั่วพาร์ติชัน (ไดเร็กทอรี)
ภายในแต่ละพาร์ติชันตารางจะมีไดเร็กทอรีของตัวเองโดยมีโครงสร้างของตารางแยกส่วน ตารางสามารถแบ่งเป็นวัน / เดือน / ปีเพื่อให้สามารถเข้าถึงเนื้อหาได้อย่างเหมาะสมที่สุด
ในการรับเนื้อหาของตารางที่แบ่งพาร์ติชันให้ใช้บล็อกรหัสต่อไปนี้ -
q)get `:c:/q/data/2000.01.13 // “get” command used, sample folder
quote| +`sym`time`bid`ask`bsize`asize`ex!(`p#`sym!0 0 0 0 0 0 0 0 0 0 0
0 0 0….
trade| +`sym`time`price`size`ex!(`p#`sym!0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 ….
มาลองรับเนื้อหาของตารางการค้า -
q)get `:c:/q/data/2000.01.13/trade
sym time price size ex
--------------------------------------------------
0 09:30:00.496 0.4092016 7 T
0 09:30:00.501 1.428629 4 N
0 09:30:00.707 0.5647834 6 T
0 09:30:00.781 1.590509 5 T
0 09:30:00.848 2.242627 3 A
0 09:30:00.860 2.277041 8 T
0 09:30:00.931 0.8044885 8 A
0 09:30:01.197 1.344031 2 A
0 09:30:01.337 1.875 3 A
0 09:30:01.399 2.187723 7 A
Note - โหมดแบ่งพาร์ติชันเหมาะสำหรับตารางที่มีบันทึกหลายล้านรายการต่อวัน (เช่นข้อมูลอนุกรมเวลา)
Sym
ไฟล์ sym คือไฟล์ไบนารี kdb + ที่มีรายการสัญลักษณ์จากตารางแยกและแบ่งพาร์ติชันทั้งหมด สามารถอ่านได้ด้วย
get `:sym
ไฟล์ par.txt (ทางเลือก)
นี่คือไฟล์คอนฟิกูเรชันที่ใช้เมื่อพาร์ติชันถูกกระจายไปบนไดเร็กทอรี / ดิสก์ไดรฟ์หลายตัวและมีพา ธ ไปยังพาร์ติชันดิสก์