【发布时间】:2017-08-21 13:42:21
【问题描述】:
参考this的问题,我也有疑问。
假设我的复合键由Owner_id~dateOfcreation 字段组成
我的钥匙是这样的:
- 所有者1~11-05-2017
- 所有者1~12-05-2017
- 所有者1~13-05-2017
- ...
- ...
- 所有者1~30-05-2017
我是否可以获取 date range 的状态,例如 Owner1~12-05-2017 to Owner~27-05-2017?
据我了解,stub.GetStateByRange(startKey,endKey) 将返回按词法顺序排列的键,因此它不会返回预期的范围。
如果我错了,请纠正我。
我尝试重新排列键,例如:
- 所有者1~2017_05_11
- 所有者1~2017_05_12
- 所有者1~2017_05_13
- ...
- ...
- 所有者1~2017_05_30
在这种情况下,如果我使用
stub.GetStateByPartialCompositeKey('owner~year~month~day',[]string{"owner1","2017","05"}) 它将返回以这些范围开头的所有键。对吗?
但在这里我也没有得到 date range 的确切输出。
谁能建议我实现这一点的正确方法。我认为这是资产共享背景下的常见业务场景,所以请帮助。
提前致谢:)
【问题讨论】:
-
我不知道它是如何工作的,但我在没有数字的情况下实现了它。另外,您能否尝试使用“Owner1”而不是“owner1”,即用大写字母 O
-
抱歉,没听懂。没有数字你取得了什么成就?为什么要使用“O”大写?
-
嗨! stub.GetStateByRange(startKey,endKey) 方法对我来说非常有用。对我来说,数字与字母组合的键,如 c999、o111。另一方面,我问你是否可以尝试用大写字母 O 传递所有者的值。在您给出的示例中,您传递的所有者是小写的。另外,您能否尝试一下它是否可以通过两个文字(例如:stub.GetStateByPartialCompositeKey('Owner1~2017_05_11', 'Owner1~2017_05_30'))?你得到什么样的回应?
-
是的,那个小“o”是错字。现已更正。对于 API 文档中的 stub.GetStateByPartialCompositeKey ,提到第一个参数应该是 key_index 而不是值。所以我认为不能尝试这种方式。关于 stub.GetStateByRange,是的,如果它是按词汇顺序的,那是可能的。但是我的数据获取是基于时间戳的,所以我不能给出一个完美的开始和结束键。我得到的唯一数字是时间戳,如果我将它用作 Owner_longTimestamp 之类的键,那么 stub.GetStateByRange 将对性能造成巨大影响,对吧?
-
我认为key_index和a值是一样的。你必须定义两个不同的key_index,它会得到其中有的结果。如果我不理解你,我很抱歉。你能再解释一下你的问题吗?
标签: go blockchain hyperledger hyperledger-fabric