Ключ-значение db, который служит только для чтения очень быстро? - PullRequest
2 голосов
/ 26 февраля 2011

Мы работаем над проектом в Scala, и мне нужна база данных значений ключей (например, карта), которая требуется в основном для обслуживания операций чтения и делает это очень быстро:

  • Никакой экзотической поддержки запросов или сложной логики поиска, просто дайте ключ и получите значение, как карту. нет условий, нет соединений, ничего. Ключ -> Значение
  • Значение, кстати, само по себе является картой некоторого списка некоторых строк или чего-то в этом роде. это означает, что это немного долго (если имеет значение)
  • Мы используем это только для чтения. Не нужно ожидать записи для начального заполнения БД или некоторых очень редких обновлений или, возможно, это может быть обработано за пределами БД ...

Я был направлен на MangoDB и memcachedDB, но Mango хорошо справляется с запросами (что не приносит мне никакой пользы), а memcacheDB - все о распределении (это не касается моего проекта). До сих пор я думаю об использовании СУБД (например, MySQL), но, возможно, в стране NoSQL есть лучшие варианты?

Ответы [ 6 ]

1 голос
/ 01 марта 2011

Я бы посоветовал вам взглянуть на Киотский кабинет .Я нахожусь в процессе написания некоторых оберток Scala вокруг этого, чтобы вы могли получить к нему доступ как к простой старой ванильной карте Scala.Я еще не сделал тест, но, согласно тестам, он быстрее, чем Berkeley DB.(Однако об этом может быть рано говорить, поскольку нет документации по накладным расходам на интеграцию Java.)

Проверьте API JavaDoc здесь .Я играл с ним в 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
1 голос
/ 28 февраля 2011

Я бы предложил SQLite или Беркли DB (который имеет SQLite-совместимый SQL API ). Оба являются простыми встроенными библиотеками баз данных - они связаны с вашим приложением, поэтому нет необходимости в отдельном сервере. Они оба очень быстро выполняют запросы. Berkeley DB обладает лучшей масштабируемостью для очень больших баз данных. Если вы заинтересованы в использовании API пары ключ-значение (NoSQL), у Berkeley DB также есть этот API.

Удачи в поиске.

1 голос
/ 26 февраля 2011

Альтернативой может быть просто использование плоского файла, данные звучат относительно просто, и вам не нужно часто записывать в файл. Кажется, что есть также реализация scala с открытым исходным кодом memcached. Этот доступ будет очень быстрым. https://github.com/victori/smemcached

0 голосов
/ 08 июля 2016

Хроническая карта - это постоянное хранилище значений ключей, встраиваемое в Java.

PalDB - это запись -once , встраиваемое, постоянное хранилище значений ключей для Java

0 голосов
/ 02 марта 2011

MemcacheDB звучит как подходящий инструмент для работы, даже если вам не нужна распределенная сетевая часть (вам не нужно ничего делать не , чтобы использовать ее).

Еще лучше, redis должен быть очень быстрым и также имеет встроенную поддержку для хранения структур данных, таких как списки или наборы.

0 голосов
/ 26 февраля 2011

MongoDB, вероятно, будет простым решением для этого.

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

...