Nosql 只提供服务的键值数据库读取速度非常快?

Nosql 只提供服务的键值数据库读取速度非常快?,nosql,key-value-store,Nosql,Key Value Store,我们正在Scala中进行一个项目,我需要一个键值数据库(如地图),该数据库主要用于读取操作,并且速度非常快: 没有任何外来的查询支持或复杂的检索逻辑,只需给出键并获取值,就像地图一样。没有条件,没有连接,什么都没有。键->值 顺便说一下,这个值本身就是一些字符串列表或类似列表的映射。意思是有点长(如果有关系的话) 我们用它只是为了阅读。除了数据库的初始填充,或者一些非常罕见的更新,或者可能可以在数据库之外处理的更新之外,没有其他写入操作 我一直致力于MangoDB和memcachedDB,但

我们正在Scala中进行一个项目,我需要一个键值数据库(如地图),该数据库主要用于读取操作,并且速度非常快:

  • 没有任何外来的查询支持或复杂的检索逻辑,只需给出键并获取值,就像地图一样。没有条件,没有连接,什么都没有。键->值
  • 顺便说一下,这个值本身就是一些字符串列表或类似列表的映射。意思是有点长(如果有关系的话)
  • 我们用它只是为了阅读。除了数据库的初始填充,或者一些非常罕见的更新,或者可能可以在数据库之外处理的更新之外,没有其他写入操作

我一直致力于MangoDB和memcachedDB,但Mango擅长查询(这对我来说没有任何价值),memcacheDB完全是关于分发的(在我的项目中没有关系)。到目前为止,我正在考虑利用RDBMS(例如MySQL),但在NoSQL领域可能有更好的选择?

MongoDB可能是一个简单的解决方案


另一种选择是只使用平面文件,数据听起来相对简单,您不必经常写入该文件。似乎还有一个开源的scala memcached实现。这将是非常快的访问

我建议使用or(与SQLite兼容)。两者都是简单的嵌入式数据库库——它们链接到应用程序中,因此不需要单独的服务器。它们都非常快地运行查询。对于非常大的数据库,Berkeley DB具有更好的可伸缩性。如果您对使用(NoSQL)感兴趣,Berkeley DB也有该API


祝你好运

我建议你看看。我正在围绕它编写一些Scala包装,允许您以普通的老式Scala地图的形式访问它。我自己还没有做过基准测试,但根据那里的基准测试,它比Berkeley DB快。(不过,现在说还为时过早,因为没有关于Java集成开销的文档。)

检查一下。我在REPL上一直在玩弄它,它工作得很好

以下是来自REPL的一些证据,证明它是有效的:

$ scala -Djava.library.path=/usr/local/lib
Welcome to Scala version 2.8.0.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_15).
Type in expressions to have them evaluated.
Type :help for more information.

scala> :cp /Users/wilfred/.m2/repository/com/fallabs/kyotocabinet/1.15/kyotocabinet-1.15.jar
Added '/Users/wilfred/.m2/repository/com/fallabs/kyotocabinet/1.15/kyotocabinet-1.15.jar'.  Your new classpath is:
.:/Users/wilfred/.m2/repository/com/fallabs/kyotocabinet/1.15/kyotocabinet-1.15.jar

scala> import kyotocabinet._                                                                
import kyotocabinet._

scala> val db = new DB()                                                                    
db: kyotocabinet.DB = (null): -1: -1

scala> db.open("casket.kch", DB.OWRITER | DB.OCREATE)
res0: Boolean = true

scala> db.set("foo", "bar")
res1: Boolean = true

scala> db.get("foo")
res2: java.lang.String = bar

MemcacheDB听起来是完成这项工作的合适工具,即使您不需要分布式网络部分(您不必做任何不使用它的事情)

更好的是,它的速度应该非常快,并且还支持存储列表或集合之类的数据结构。

是一个纯Java可嵌入的持久键值存储

  • 提供一个简单的API,
    java.util.Map
  • 根据variuos基准测试,它是Java的一个关键值存储
是一个用于Java的一次写入、可嵌入、持久的键值存储

  • 与历史地图相比,提供的API更受限制且不易使用

有趣的评论。我想,平面文件的问题是随机访问效率低下,因为值和键的长度不是固定的。还是我遗漏了一些旧的编程书籍;-)?