• 使用LevelDB 实现富查询


         超级账本也可以使用CouchDBCouchDB可以支持类似于SQLselect语句来实现富查询。CouchDB可以避免使用任何客户端,只需要通过HTTP请求就可以操作数据库了。但是CouchDB的效率并不高,在不建立索引的情况下,对2-3万条的数据使用select语句就会导致查询非常耗时,从而导致合约函数的执行超时而失败。而对于传统的关系型数据库,2-3万条的数据量,在不建立索引的情况下,对查询的影响不是很明显[1]。

    使用LevelDB 实现富查询

    能用LevelDB实现富查询,需要我们做一些额外的工作。https://www.jianshu.com/p/b131a8503559

    建立索引。
    运用shim包中关于组合键的方法。

        // GetStateByPartialCompositeKey queries the state in the ledger based on
        // a given partial composite key. This function returns an iterator
        // which can be used to iterate over all composite keys whose prefix matches
        // the given partial composite key. The `objectType` and attributes are
        // expected to have only valid utf8 strings and should not contain
        // U+0000 (nil byte) and U+10FFFF (biggest and unallocated code point).
        // See related functions SplitCompositeKey and CreateCompositeKey.
        // Call Close() on the returned StateQueryIteratorInterface object when done.
        // The query is re-executed during validation phase to ensure result set
        // has not changed since transaction endorsement (phantom reads detected).
        GetStateByPartialCompositeKey(objectType string, keys []string) (StateQueryIteratorInterface, error)

        // CreateCompositeKey combines the given `attributes` to form a composite
        // key
    . The objectType and attributes are expected to have only valid utf8
        // strings and should not contain U+0000 (nil byte) and U+10FFFF
        // (biggest and unallocated code point).
        // The resulting composite key can be used as the key in PutState().
        CreateCompositeKey(objectType string, attributes []string) (string, error)

        // SplitCompositeKey splits the specified key into attributes on which the
        // composite key was formed. Composite keys found during range queries
        // or partial composite key queries can therefore be split into their
        // composite parts.
        SplitCompositeKey(compositeKey string) (string, []string, error)

    GetStateByPartialCompositeKey方法是采用一种前缀匹配的方法来进行键的匹配返回的。

    也就是说,只能拿前面的复合键进行匹配,而不是后面部分。

    举例来说当你有一个 “”年份~颜色~车号“”的索引时,只能使用 “”年份“”、“”年份~颜色“”来进行查询,而不能用“”颜色“”来进行查询。因此当我们有多键的复合主键时,各个键的顺序需要仔细思考一下。

    [1]https://learnblockchain.cn/article/3831 总结超级账本合约开发过程中遇到的坑

  • 相关阅读:
    vue项目打包优化
    PP-YOLOE: An evolved version of YOLO(2022.12)
    【深入Java原子类:高性能并发编程的技巧与实践】
    维格云数据回收站入门教程
    【网络服务&数据库教程】07 ELK日志解决方案
    PageOffice 在线编辑 office文件,回调父页面
    Mac m1下Qt6.2.4的Mysql驱动插件编译配置和加载
    LeetCode力扣刷题——更加复杂的数据结构
    6. 项目管理之进度管理
    黑马JVM总结(一)
  • 原文地址:https://blog.csdn.net/sjh2100/article/details/128062402