3.1 时间有序存储

一般业务数据都有发生时间属性,当时间跨度比较长时,查询统计往往需要先按时间段过滤。数据以时间有序存储时可以提升过滤速度。

3.1.1 集文件

存量数据:将数据读出时按时间排序,然后写入二进制文件

A
1 =file(“ShipVia.btx”).import@bi()
2 =file(“Orders.txt”).cursor@mt(CustomerID:string, OrderDate:datetime, ProductID:string, Quantity:int, Unit:string, Price:decimal, Amount:decimal, EmployeeID:int,EmployeeName:string,ShipVia:string).run(OrderDate=days@o(OrderDate), ShipVia=A1.pos@b(ShipVia)).sortx(OrderDate;1000000)
3 =file(“Orders_Time.btx”).export@b(A2)

A1 读取 Orders 表的数据时按时间排序

增量数据:一般单独一个文件存储,这里假设是 Orders_add.txt

A
1 =file(“ShipVia.btx”).import@bi()
2 =file(“Orders_add.txt”).cursor@t(CustomerID:string, OrderDate:datetime, ProductID:string, Quantity:int, Unit:string, Price:decimal, Amount:decimal, EmployeeID:int, EmployeeName:string, ShipVia:string).run(OrderDate=days@o(OrderDate), ShipVia=A1.pos@b(ShipVia)).sortx(OrderDate;1000000)
3 =file(“Orders_Time.btx”).export@ba(A2)

A2 读取增量数据文件,按 OrderDate 排序
A3 将 A2 中的数据通过游标读出追加到 Orders.btx 集文件中。由于本例按 OrderDate 排序,增量部分天然是后序时间产生的订单,所以不需要考虑和原文件合并排序的问题,直接追加即可。

3.1.2 组表

组表按块存储,每一块会保存维字段的最大最小值(minmax 索引)。对于针对维字段的过滤条件,可以迅速跳过没有符合条件的块。
有序存储还能进一步提升压缩率以减少外存访问量。

存量数据:将数据读出时按时间排序,然后写入组表文件

A
1 =file(“ShipVia.btx”).import@bi()
2 =file(“Orders.txt”).cursor@mt(OrderDate:datetime, CustomerID:string, ProductID:string, Quantity:int, Unit:string, Price:decimal, Amount:decimal, EmployeeID:int,EmployeeName:string,ShipVia:string).run(OrderDate=days@o(OrderDate), ShipVia=A1.pos@b(ShipVia)).sortx(OrderDate;1000000)
3 =file(“Orders_Time.ctx”).create@y(#OrderDate, CustomerID, ProductID, Quantity, Unit, Price, Amount, EmployeeID,EmployeeName,ShipVia)
4 =A3.append(A2)
5 >A3.close()

A2 数据按 OrderDate 排序
A3 create() 产生组表文件的结构时,指定 #OrderDate 表示以 OrderDate 作为维字段有序存储。#OrderDate 必须写在前面,所以相应地,A2 也需要调整字段顺序,把 OrderDate 写到前面

增量数据

A
1 =file(“ShipVia.btx”).import@bi()
2 =file(“Orders_add.txt”).cursor@mt(OrderDate:datetime, CustomerID:string, ProductID:string, Quantity:int, Unit:string, Price:decimal, Amount:decimal, EmployeeID:int, EmployeeName:string, ShipVia:string).run(OrderDate=days@o(OrderDate), ShipVia=A1.pos@b(ShipVia)).sortx(OrderDate;1000000)
3 =file(“Orders_Time.ctx”).open()
4 =A3.append(A2)
5 >A3.close()

A2 读取增量数据文件,按 OrderDate 排序
A4 将 A2 中的数据通过游标读出追加到 Orders.ctx 组表文件中。由于本例按 OrderDate 排序,增量部分天然是后序时间产生的订单,所以不需要考虑和原文件合并排序的问题,直接追加即可

以下是广告时间

对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅



嗯,还不太了解好多乾?
猛戳这里
玩转好多乾