3

我想使用 leveldb 在 c++ 和 python 中有效地存储整数和整数数组。

对于 C++ 中的整数,我可以将 int 转换为 char 数组。在 c++ 中存储 int 数组以及在 python 中存储 int 和 int 数组有什么建议吗?

4

3 回答 3

1

您可以考虑使用像 Google 的 protobuf (http://code.google.com/p/protobuf/) 这样能够(反)序列化结构化数据的库。对于您提到的情况,重复字段可以解决问题:

message List {
  repeated int64 val = 1;
}

鉴于协议缓冲区使用的 varint 编码(并且取决于您的值范围),这可能是存储整数的有效方法。

http://code.google.com/apis/protocolbuffers/docs/encoding.html#varints

在不了解您的用例的情况下很难说更多。每个数组平均要存储多少个整数?整数值的范围是多少?等等

于 2012-01-27T01:03:14.263 回答
0

对于intc++ 中的数组,您必须将int数组作为 achar*传递给 Slice 类,然后您可以轻松地将其放入 leveldb 数据库,例如

int myArray[3] = {1,2,3};
Slice valueSlice = Slice( (const char*) myArray, sizeof(myArray) );

这基本上适用于所有类型以及自定义类,例如

MyClass* newObj = new MyClass();
Slice valueSlice = Slice( (const char*) newObj, sizeof(MyClass) );
于 2012-01-24T09:05:03.710 回答
0

对于 python,struct可以是高效的。这是一个使用leveldb-py中的 ctypes leveldb 接口的示例,将值 1,2,3,4,5(作为整数数组)存储在数据库中,键为 100:

import leveldb,array,struct

#this assumes 32-bit unsigned integers in machine order
value=struct.pack('p',array('I',[1,2,3,4,5]))
key=struct.pack('I',100)

db=leveldb.DB("/path/to/db", create_if_missing=True)
db[key]=value

为提高效率,如果您有大量写入操作,请导入特定函数(例如“from struct import pack”)并使用 leveldb 的 WriteBatch 类。

整数键/值可以存储在 LevelDB 中吗?建议可能需要自定义比较器,但是这个特定的 Python leveldb 接口不支持。 https://plyvel.readthedocs.org/en/latest/可能是更好的选择。

于 2013-12-06T16:03:31.303 回答