0

我想使用 BDB 作为时间序列数据存储,并计划使用自纪元以来的微秒作为键值。我使用 BTREE 作为数据存储类型。

但是,当我尝试存储整数键时,bsddb3 会给出错误提示TypeError: Integer keys only allowed for Recno and Queue DB's

最好的解决方法是什么?我可以将它们存储为字符串,但这可能会使它不必要地变慢。

鉴于 BDB 本身可以处理任何类型的数据,为什么会有限制?我可以破解 bsddb3 实现吗?有人用过其他方法吗?

4

2 回答 2

1

您不能存储整数,因为 bsddb 不知道如何表示整数以及它是哪种整数。

如果将整数转换为字符串,则会破坏 bsddb: 键的字典顺序,10 > 2但作为 strings "10" < "2"

您必须使用 python struct将整数转换为字符串(或在 python 3 中转换为字节)以存储然后将它们存储在 bsddb 中。您必须使用 bigendian 包装,否则订购将不正确。

然后您可以使用 bsddbCursor.set_range(key)在给定的时间片内查询信息。

例如,Cursor.set_range(struct.unpack('>Q', 123456789))将光标设置在 123456789 或之后发生的第一个事件的键上。

于 2015-08-21T19:00:27.830 回答
-1

好吧,没有解决方法。但是你可以使用两种方法

  1. str使用or将整数存储为字符串repr。如果整数很大,您甚至可以使用字符串格式

  2. 使用 cPickle/pickle 模块来存储和检索数据。如果您有基本类型以外的数据类型,这是一个好方法。对于 basicsintfloats 这实际上比存储字符串更慢并且占用更多空间

于 2013-09-13T19:17:46.767 回答