gpt4 book ai didi

ip-geolocation - LevelDB 键,来自 csv 的值

转载 作者:行者123 更新时间:2023-12-02 02:19:18 25 4
gpt4 key购买 nike

我有约 500 万行的巨大 csv 文件数据库,其中包含以下字段

start_ip,end_ip,country,city,lat,long 

我使用 start_ip 作为键并将 rest 作为值将它们存储在 LevelDB 中。

如何检索键的记录

( ip_key > start_ip and ip_key < end_ip )

任何替代解决方案。

最佳答案

我假设您的 key 是 IP 的散列值,并且散列是 64 位“无符号”整数,但如果不是这种情况,则只需修改下面的代码以说明正确的 key 。

void MyClass::ReadRecordRange(const uint64 startRange, const uint64 endRange)
{
// Get the start slice and the end slice
leveldb::Slice startSlice(static_cast<const char*>(static_cast<const void*>(&startRange)), sizeof(startRange));
leveldb::Slice endSlice(static_cast<const char*>(static_cast<const void*>(&endRange)), sizeof(endRange));

// Get a database iterator
shared_ptr<leveldb::Iterator> dbIter(_database->NewIterator(leveldb::ReadOptions()));

// Possible optimization suggested by Google engineers
// for critical loops. Reduces memory thrash.
for(dbIter->Seek(startSlice); dbIter->Valid() && _options.comparator->Compare(dbIter->key(), endSlice)<=0); dbIter->Next())
{
// get the key
dbIter->key().data();

// get the value
dbIter->value().data();

// TODO do whatever you need to do with the key/value you read
}
}

请注意,_options 与您打开数据库实例时使用的 leveldb::Options 相同。您想使用选项中指定的比较器,以便您读取记录的顺序与数据库中的顺序相同。

如果你不使用 boost 或 tr1,那么你可以使用类似于 shared_ptr 的其他东西,或者自己删除 leveldb::Iterator。如果不删除迭代器,则会泄漏内存并在 Debug模式下获取断言。

关于ip-geolocation - LevelDB 键,来自 csv 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9097985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com