• AppBoxFuture: 123挨个站-数据按序存储


      最近几天在优化存储的编码规则,顺带把之前设计了但未实现的倒排序一并实现了。由于所有数据(元数据、实体、索引等)都映射至RocksDB的Key-Value存储,所以必须扩展RocksDB的自定义比较器(Comparator)来实现自定义Key的排序规则。存储层涉及到需要自定义排序的主要是分区元数据、实体数据以及索引,下面分别说明:

    一、分区排序

      在大表分区设置分区键及其规则时,可以根据需要设置每个分区键的排序,如下图所示:

    如果分区键规则是Hash,设置排序将被忽略

    二、实体排序

      在新建实体模型时可以根据需要指定主键排序,这里需要注意的是不同于传统数据库可以指定任意字段作为主键,实体的主键是128位的顺序Guid,包括时间戳及集群节点等编码信息,所以这里的实体排序指的是按时间戳正倒排。如果实体是如订单等跟时间相关的数据类型,建议设置为倒排以方便扫描最近的实体数据。具体参考下图设置:

    三、索引排序

      在添加索引时可以根据需要设置每个索引键的排序,如下图所示:

    四、排序测试

      我们来做个简单的测试:

    • 新建一个分区表VehicleState按时间降序,加入字段VID Int32, Speed Int32,设置分区键为VID按降序;

    • 新建一个服务填充3 * 3条数据,如下示例代码:

    public async Task<object> Insert()
    {
        return await SimplePerfTest.Run(3, 3, async (i, j) =>
        {
            var obj = new Entities.VehicleState(i + 1);
            obj.Speed = 10 + j;
            await EntityStore.SaveAsync(obj);
        });
    }
    
    • 通过dbscan工具验证分区元数据排列顺序,如下图所示红框内为3个分区的排列顺序:

    • 通过实体模型设计界面内的数据浏览验证排列顺序,如下图所示3个红框为3个分区的排列顺序:

    五、本篇小结

      经过这次编码规则优化,存储引擎的编码格式已基本定型,下一步按计划实现各项必须功能并加强存储引擎的测试,GitHub上的运行时也更新为新的编码格式,大家可安装测试。另码文不易,一边码代码一边码文更不易,作者需要您的支持请多多点赞推荐!

  • 相关阅读:
    java 浅显的会议预约-没有测试过
    Postgresql 与 Spring的集成
    对象转JSON正则查找替换
    Java 对象与JSONString的互相转换
    excel 中涉及到金额显示0E-8的 可以使用以下语句来把excel导出修改为0
    Java 非正则方式校验数据
    泛型与反射的使用
    正则表达式,匹配 URL 是IP还是域名
    对外接口加密
    自定义SQL查询的使用
  • 原文地址:https://www.cnblogs.com/BaiCai/p/11307651.html
Copyright © 2020-2023  润新知