我们正在Scala中进行一个项目,我需要一个主要用于读取操作所需的键值数据库(如地图),并且非常快速地执行此操作:
我已被定向到MangoDB和memcachedDB,但Mango擅长查询(这对我没有任何价值),而memcacheDB则是关于分发(在我的项目中不是一个问题)。到目前为止,我正在考虑利用RDBMS(例如MySQL),但也许在NoSQL领域有更好的选择?
答案 0 :(得分:1)
另一种方法是使用平面文件,数据听起来相对简单,您不必经常写入文件。似乎还有一个memcached的开源scala实现。这种访问速度非常快。 https://github.com/victori/smemcached
答案 1 :(得分:1)
我建议SQLite或Berkeley 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可能是一个简单的解决方案。
答案 4 :(得分:0)
MemcacheDB听起来就像是工作的正确工具,即使你不需要分布式网络部分(你不需要做任何不来使用它)。
更好的是,redis应该非常快,并且还支持存储列表或集合等数据结构。
答案 5 :(得分:0)
Chronicle Map是一个纯Java可嵌入的持久键值存储。
java.util.Map
PalDB是一个用于Java的一次性写入,可嵌入,持久的键值存储