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 (ทางเลือก)

นี่คือไฟล์คอนฟิกูเรชันที่ใช้เมื่อพาร์ติชันถูกกระจายไปบนไดเร็กทอรี / ดิสก์ไดรฟ์หลายตัวและมีพา ธ ไปยังพาร์ติชันดิสก์