当前位置:网站首页 > 技术博客 > 正文

leveldb lrucache



欢迎转载,转载请注明出处!原文地址 Follow me on GitHub ^_^

作者:Jeff Dean, Sanjay Ghemawat原文:https://rawgit.com/google/leveldb/master/doc/index.html译者:KevinsBobo

LevelDB提供一个持久的键值存储库。keys 和 values 都可以是任意的字节数组。key是通过用户提供的比较器函数在键值存储器内进行排序的。

在默认情况下,中的每一次写操作都是异步的:它会在把写入操作从进程中推送到操作系统后返回,而从操作系统内存到底层持久化存储的传输是异步的。对于特定的写操作,是可以打开同步标志使写操作一直到数据被传输到底层存储器后再返回。(在基于Posix标准的操作系统系统中,这一步是通过在写操作返回之前调用或或实现的。)

异步写操作一般比同步写操作快很多很多。但异步写入的缺点是,在机器宕机时有可能导致最后几步的更新丢失。请注意,如果是在写入过程中的宕机(而非重新启动),即使设置为,更新操作也会认为已经将更新从内存中推送到了操作系统。

通常可以安全地使用异步写入。比如,当加载大量数据到数据库中时,可以通过在宕机后重新启动批量加载来处理丢失的更新。有一个可用的混合方案,将多次写入的第N次写入设置为同步的,并在宕机重启后的情况下,批量加载由前一次运行的最后一次同步写入之后重新开始。(同步写入时可以更新描述宕机后批量加载重新开始的标记。)

提供一个代替异步写操作的选择:将多个更新操作放置在同一个对象中然后使用同步写入一起应用(设置为);这时同步写入的额外成本开销将在这批次中所有的写入操作中摊销。

一个数据库在同一时间内只能由一个进程打开,通过从操作系统中获取锁的方式防止误用。在单个进程中,同一个对象可以安全的由多个并发线程共享使用。即,不同的线程可以同时写入或获取迭代器,或在没有任何外部同步的情况在同一数据库上调用(的实现过程中将自动自行所需的同步)。但是其他对象(如和)可能需要外部同步。如果两个线程共享这样的对象,它们必须使用自己的协议锁来保护自己的访问。更多详细的细节在公共的头文件中描述。

版权声明


相关文章:

  • 黑客定位找人软件下载2025-04-15 23:30:02
  • 游戏开发编程2025-04-15 23:30:02
  • tinyxml读取xml2025-04-15 23:30:02
  • 数据库事务是2025-04-15 23:30:02
  • hsqldb h22025-04-15 23:30:02
  • ad服务器和ldap服务器有什么区别2025-04-15 23:30:02
  • 在线客服系统网站2025-04-15 23:30:02
  • arduino通过l298n控制转速2025-04-15 23:30:02
  • 前端跨域调用js方法解决方案2025-04-15 23:30:02
  • xargs命令详解2025-04-15 23:30:02