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

时间:2011-02-26 06:01:43

标签: nosql key-value-store

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

  • 在任何方面都没有异国情调的查询支持或复杂的检索逻辑,只需给出键并获取值,就像地图一样。没有条件,没有加入,没有。键 - >值
  • 顺便说一下,这个值本身就是某些字符串列表或类似字符串的映射。意思是它有点冗长(如果有意义的话)
  • 我们只是用它来阅读。没有写入期望初始填充数据库或一些非常罕见的更新,或者可能在数据库之外处理......

我已被定向到MangoDB和memcachedDB,但Mango擅长查询(这对我没有任何价值),而memcacheDB则是关于分发(在我的项目中不是一个问题)。到目前为止,我正在考虑利用RDBMS(例如MySQL),但也许在NoSQL领域有更好的选择?

6 个答案:

答案 0 :(得分:1)

另一种方法是使用平面文件,数据听起来相对简单,您不必经常写入文件。似乎还有一个memcached的开源scala实现。这种访问速度非常快。 https://github.com/victori/smemcached

答案 1 :(得分:1)

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

祝你好运。

答案 2 :(得分:1)

我建议你看一下Kyoto Cabinet。我正在编写一些Scala包装器,允许您以普通的旧香草Scala Map访问它。我自己还没有做过基准测试,但根据那里的基准测试,它比Berkeley DB更快。 (但是,由于没有关于Java集成开销的文档,所以可能要尽早告诉。)

检查JavaDoc APIs here。我一直在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

答案 3 :(得分:0)

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

http://www.mongodb.org/display/DOCS/Benchmarks

答案 4 :(得分:0)

MemcacheDB听起来就像是工作的正确工具,即使你不需要分布式网络部分(你不需要做任何来使用它)。

更好的是,redis应该非常快,并且还支持存储列表或集合等数据结构。

答案 5 :(得分:0)

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

PalDB是一个用于Java的一次性写入,可嵌入,持久的键值存储