标签: leveldb

整数键/值可以存储在LevelDB中吗?

我搜索了支持整数键和整数值的键值存储.LevelDB似乎是一个不错的选择,但我找不到关于是否支持整数值/键的任何信息

database key-value leveldb

5
推荐指数
1
解决办法
4812
查看次数

LevelDB快照可以在数据库关闭后继续存在吗?

我想知道LevelDB库的'snapshot'工具是否可以创建一个快照引用,即使在关闭open数据库对象之后也可以保存它(因此在后续打开时重用).

我怀疑没有,这导致了后续行动:是否有一种好的/推荐的方法可以在快照瞬间对数据库进行一致的备份,理想情况下即使其他活动仍在继续?(也就是说,没有通过API迭代整个快照键范围?)

(基本上我正在寻找一些类似于通过某个检查点来保存BerkeleyDB-JE的仅附加JDB日志文件的东西.)

key-value key-value-store leveldb

5
推荐指数
1
解决办法
1760
查看次数

使用键值数据库作为具有持久索引的集合

因为下面有点长:这是tl; dr; version:快速键值查找是否存在现有键/值最佳实践,类似于具有持久索引的基于哈希的集合?

我对键值数据库的世界感兴趣,到目前为止还没有弄清楚如何有效地实现以下用例:

假设我们想要序列化一些数据,并通过持久的唯一整数索引在其他地方引用它们.例如:Key = unsigned int,Value = MyData.

数据库应具有快速键查找并确保MyData是唯一的.

现在,当我向数据库插入一个新值时,我可以为它分配一个新的索引键,例如数据库的当前大小,或者为了防止在删除项目后发生冲突,我可以在外部保留一些计数器.

但是,我如何确保不将相同的MyData值插入数据库?到目前为止,它看起来好像这对于键值数据库来说无法有效实现 - 这是正确的吗?即我希望遍历整个数据库只是为了确保MyData的价值并不在那里已经...

那么实施这个的最佳实践是什么?

对于背景:我在KDevelop上工作,我们使用上面的代码分析缓存.我们实际上有一个上述用例1的自定义实现.如果您对内部感兴趣,请搜索Bucket和ItemRepository,并参阅2以了解ItemRepository的示例用法.

但你可能会同意,这段代码很难理解,因而难以维护.我想将其性能与可能导致更简单代码的替代解决方案进行比较 - 但前提是它不会导致严重的性能损失.考虑到围绕OpenLDAP MDB,Kyoto Cabinet和LevelDB等键值存储性能的炒作,这是我想要开始的地方.

我们在KDevelop中所拥有的 - 据我所知 - 基本上是一种混合磁盘/内存中的哈希映射,它会定期保存到磁盘上(当然,在崩溃的情况下会导致严重的数据损坏等). ).项目基于它们的散列值存储在一个位置,当然,只要散列函数很快,它们也允许相对快速的值查找.增加的扭曲是您还获得某种持久性数据库索引,可用于非常有效地查找项目.

所以 - 长话短说 - 如何用一个关键/价值数据库如LevelDB,Kyoto Cabinet,OpenLDAP MDB来做到这一点 - 你说出来了吗?

indexing key-value openldap kyotocabinet leveldb

5
推荐指数
1
解决办法
1093
查看次数

为什么在类声明中使用宏

我正在阅读leveldb的源代码,特别是.关于互斥锁.

我发现了这个声明:

class SCOPED_LOCKABLE MutexLock {
 public:
  explicit MutexLock(port::Mutex *mu) EXCLUSIVE_LOCK_FUNCTION(mu)
      : mu_(mu)  {
    this->mu_->Lock();
  }
  ~MutexLock() UNLOCK_FUNCTION() { this->mu_->Unlock(); }

 private:
  port::Mutex *const mu_;
  // No copying allowed
  MutexLock(const MutexLock&);
  void operator=(const MutexLock&);
};
Run Code Online (Sandbox Code Playgroud)

我发现它SCOPED_LOCKABLE被定义为空,所以为什么在类声明中使用它?

c++ leveldb

5
推荐指数
1
解决办法
1300
查看次数

从LevelDB数据库获取所有密钥

我正在编写一个脚本来收集所有比特币块的哈希值.程序bitcoind,如果更改某个设置,则存储LevelDB数据库中所有块的元数据.每组元数据的关键是块的散列,它通常用作它的标识符.本质上,我试图从每个块中获取元数据的特定部分(事务ID).我正在写的脚本是在Haskell中,尽管我可以在必要时总是执行shell命令.总而言之,我不确定最简单的方法是找到所有块哈希(键),然后调用bitcoind来获取每个块的元数据.如果有任何方法可以直接从LevelDB数据库中获取每个值,那么也可以.什么是最简单有效的方法?

haskell leveldb

5
推荐指数
1
解决办法
2423
查看次数

如何使用Node.js制作多线程应用程序并访问LevelDB?

LevelUP文档(https://github.com/rvagg/node-levelup#multi-process-access)中有以下内容:

LevelDB是线程安全的,但适合通过多个进程进行访问。您只应该从单个Node.js进程中打开LevelDB数据库。Node.js集群由多个进程组成,因此LevelUP实例也无法在它们之间共享。

因此,我无法使用节点群集(http://nodejs.org/api/cluster.html

是否有另一个选择可以使多进程(或多线程)Node.js应用程序访问LevelDB数据库?

multithreading multiprocessing node.js leveldb

5
推荐指数
1
解决办法
1117
查看次数

如果没有适当的比较器,您能否*读取* leveldb数据?

我正在尝试访问Chrome存储indexeddbs生成的leveldbs。我得到键和值。但是它们要么以未知的编码-我尝试了多种方法来检测它们-要么它们以某种方式被加扰。

import plyvel    
db = plyvel.DB(dirname, comparator=cmp, comparator_name="idb_cmp1")
for key, value in db:
    print(key) 
    print(value)
Run Code Online (Sandbox Code Playgroud)

我不介意密钥是否按此处所述随机排列。但是,以可读的方式获取键和值会很好。我也不在leveldb中处理二进制数据。

我在python中使用plyvel遍历数据库。可能与以下答案有关:LevelDB C迭代器

python google-chrome python-2.7 indexeddb leveldb

5
推荐指数
1
解决办法
822
查看次数

leveldb-go示例,docs

LevelDB-Go是Go语言中LevelDB的端口.LevelDB-Go通常被称为Go应用程序的本机替代品.网站没有示例,也没有文档.

我应该通过阅读源代码来学习吗?或者还有另一个包含示例和文档的网站?

库是否支持并发?

go leveldb

4
推荐指数
1
解决办法
3252
查看次数

levelDB 还会损坏数据吗?

我正在编写一个小型 NodeJS 应用程序,我需要某种数据库。LevelDB ( LevelUP ) 和NeDB似乎是最受欢迎的,所以选择哪个......

维基百科 2016 年 11 月 18 日报道,LevelDB 经常损坏数据。

LevelDB 因不可靠而广受关注,其管理的数据库容易损坏。[13][14][15][16][17][18][19][20] 对过去版本的LevelDB[21][22]的学术研究发现,在某些文件系统下,这些版本的LevelDB中存储的数据可能会在系统崩溃或断电后变得不一致。LevelDB 损坏非常普遍,因此必须将损坏检测内置到使用它的应用程序中。[23]

问题

这是过去的事了,不再是问题了吗?

javascript node.js leveldb nedb

4
推荐指数
1
解决办法
1822
查看次数

LevelDB 可容纳数百个数百万条目

调整 LevelDB 存储的插入时要考虑的首要因素是什么?

我正在以下形式插入 500M+ 记录:

  1. key="rs1234576543"非常可预测的结构。rs<1+ 位>
  2. value="1,20000,A,C"字符串可以更长,但通常约为 40 个字符
  3. 密钥是唯一的
  4. 钥匙插入顺序是随机的

使用 python plyvel 进入 LevelDB 存储,随着记录数量的增加,速度会急剧下降。我想这是预料之中的,但是我可以考虑一些调整措施来使其更好地扩展吗?

示例代码:

import plyvel
BATCHSIZE = 1000000

db = plyvel.DB('/tmp/lvldbSNP151/', create_if_missing=True)
wb = db.write_batch()
# items not in any key order
for key, value in DBSNPfile:
    wb.put(key,value)
    if i%BATCHSIZE==0:
        wb.write()
wb.write()
Run Code Online (Sandbox Code Playgroud)

我尝试过各种批量大小,这有点帮助,但我希望还有其他东西我错过了。例如,可以利用知道键(或值)的最大长度吗?

python leveldb

4
推荐指数
1
解决办法
1852
查看次数