3

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

  • 没有任何奇异的查询支持或复杂的检索逻辑,只需给出键并获取值,就像地图一样。没有条件,没有连接,什么都没有。键 -> 值
  • 顺便说一句,值本身就是一些字符串列表或类似内容的映射。这意味着它有点冗长(如果重要的话)
  • 我们只用它来阅读。对于数据库的初始填充或一些非常罕见的更新,或者可能可以在数据库之外处理,没有写作期望......

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

4

6 回答 6

1

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

祝您搜索顺利。

于 2011-02-28T05:10:41.787 回答
1

我建议你看看京都内阁。我正在围绕它编写一些 Scala 包装器,允许您将它作为一个普通的老式香草 Scala 映射来访问。我自己还没有做过基准测试,但是根据那里的基准测试,它比 Berkeley DB 快。(但是,现在说还为时过早,因为没有关于 Java 集成开销的文档。)

在此处查看JavaDoc API。我一直在 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
于 2011-03-01T06:22:36.710 回答
1

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

于 2011-02-26T06:45:28.817 回答
1

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

PalDB是Java的一次写入、可嵌入、持久的键值存储

于 2016-07-08T15:24:02.200 回答
0

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

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

于 2011-02-26T06:10:45.463 回答
0

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

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

于 2011-03-02T14:36:07.357 回答