Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Suche Empfehlung: Key-Value DB [solved]
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Thu Mar 24, 2011 9:06 am    Post subject: Suche Empfehlung: Key-Value DB [solved] Reply with quote

Suche eine Empfehlung für eine Key-Value DB für ca. 5-50 Mio. Datensätze. Key ist md5 und Value ein String (max. ~100 Zeichen). Normale Operationen sind Werte eintragen und anhand Key lesen. Eine Suche in den Values wird nicht benötigt, optional wäre aber die Ermittlung des Key anhand Value von Vorteil.

Einfaches Handling und weniger Ressourcenverbrauch ist wichtiger als Geschwindigkeit.

Zugriff soll lokal über Console-Tools wie auch optional remote über eine API für andere Programiersprachen (REST/HTTP) erfolgen.

Etwas SQL basiertes scheint mir dafür völlig fehl am Platz, für den Rest fehlt mir aber die Erfahrung. Wer kann mir was empfehlen?

//EDIT

Ich liebäugel da ein wenig mit CouchDB. Wollte ich sowieso mal ausprobieren, dementsprechend wäre das o.g. Szenario doch optimal zum Testen. Oder wäre CouchDB da völlig fehl am Platz, weil es doch dokumentorientiert ist?


Last edited by slick on Mon Mar 28, 2011 11:42 am; edited 1 time in total
Back to top
View user's profile Send private message
manuels
Advocate
Advocate


Joined: 22 Nov 2003
Posts: 2146
Location: Europe

PostPosted: Thu Mar 24, 2011 9:51 am    Post subject: Reply with quote

CouchDB wäre wohl nicht fehl am Platze, aber ich hab mir auch mal verschiedene NoSQL-DBs angeschaut.
Irgendwie bin ich mit CouchDB nicht wirklich warm geworden. Ich präferiere MongoDB, kann es dir aber nur damit begründen, dass ich das Konzept von CouchDB etwas zu kompliziert finde.
MongoDB ist da weitaus einfacher zu verstehen (vielleicht, weil es auch nicht soviele Features hat, wie z.B. das Outputformat als Javascript-Programm in der Datenbank zu spezifizieren. Ich finde, dass sowas nicht die DB, sondern das Programm machen sollte)
_________________
Build your own live cd with catalyst 2.0!
Back to top
View user's profile Send private message
Necoro
Veteran
Veteran


Joined: 18 Dec 2005
Posts: 1912
Location: Germany

PostPosted: Thu Mar 24, 2011 10:10 am    Post subject: Reply with quote

Als Alternative zu den Server-Varianten gibt es auch die auf einem System bereits installierten *dbm-Varianten, bzw als wohl effizienteste Variante die Oracle Berkeley DB (sys-libs/db). Diese bieten zwar kein Cmdline-Tools an sich an, aber mit den Perl/Python/etc Bindings sollten sich Wrapper-Skripte bei Bedarf schnell bauen lassen.

Wie die sich jetzt in Bezug auf Performance zu zB MongoDB verhalten, weiß ich aber nicht.
_________________
Inter Deum Et Diabolum Semper Musica Est.
Back to top
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Thu Mar 24, 2011 6:51 pm    Post subject: Reply with quote

Necoro wrote:
bzw als wohl effizienteste Variante die Oracle Berkeley DB (sys-libs/db

Wie kommst Du darauf?

Benchmark Test of DBM Brothers
Benchmarking BDB, CDB and Tokyo Cabinet on large datasets

bdb kenne ich von früher als ziemlich instabil, cdb ist nett - allerdings beim Schreiben unhandlich. Ich hätte Tokyo Cabinet empfohlen, aber inzwischen gibt es einen Nachfolger: http://1978th.net/kyotocabinet/
_________________
Je dümmer desto Gnome/KDE.
Back to top
View user's profile Send private message
Necoro
Veteran
Veteran


Joined: 18 Dec 2005
Posts: 1912
Location: Germany

PostPosted: Thu Mar 24, 2011 7:07 pm    Post subject: Reply with quote

Da ich nur GDBM, NDBM und BDB im Kopf hatte, hatte ich deinem Benchmark zufolge sogar recht :). Die ganzen anderen kannte ich schlicht nicht, hab mit dem Thema auch nix weiter zu tun.
_________________
Inter Deum Et Diabolum Semper Musica Est.
Back to top
View user's profile Send private message
l3u
Advocate
Advocate


Joined: 26 Jan 2005
Posts: 2616
Location: Konradsreuth (Germany)

PostPosted: Fri Mar 25, 2011 6:03 pm    Post subject: Reply with quote

Für Schlüssel -> Wert würd ich Berkeley DB nehmen. Hat null Overhead, weil sie genau das und NUR das macht (und kann): den Wert für einen Schlüssel liefern. Ohne Beweise liefern zu können bin ich der Meinung, daß das die schnellste, schlankeste und adäquateste Lösung in dem Fall ist. In b8 funktioniert sie jedenfall super für genau den selben Einsatzzweck. Inwiefern es schnellere und bessere Datenbanken gibt, die genau das selbe machen, weiß ich nicht.
Back to top
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Fri Mar 25, 2011 6:48 pm    Post subject: Reply with quote

l3u wrote:
Ohne Beweise liefern zu können bin ich der Meinung, daß das die schnellste, schlankeste und adäquateste Lösung in dem Fall ist.

Wer sich so aus dem Fenster lehnt...
Quote:
Inwiefern es schnellere und bessere Datenbanken gibt, die genau das selbe machen, weiß ich nicht.

muss einfach fallen.

Edit: Falls Du Transaktion etc. brauchst. InnoDB usw. kann man auch ohne SQL einsetzen.
_________________
Je dümmer desto Gnome/KDE.
Back to top
View user's profile Send private message
l3u
Advocate
Advocate


Joined: 26 Jan 2005
Posts: 2616
Location: Konradsreuth (Germany)

PostPosted: Mon Mar 28, 2011 9:56 am    Post subject: Reply with quote

Ich sag ja nur, mit was ich gute Erfahrungen gemacht habe … ohne Anspruch auf Richtigkeit und/oder Allwissen. Außerdem bitte ich auch Necoro anzustänkern, der hat auch „Berkeley DB“ gesagt :-P
Back to top
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Mon Mar 28, 2011 10:18 am    Post subject: Reply with quote

l3u wrote:
Ich sag ja nur, mit was ich gute Erfahrungen gemacht habe … ohne Anspruch auf Richtigkeit und/oder Allwissen

Quote:
daß das die schnellste, schlankeste und adäquateste Lösung in dem Fall ist

Und Du bist nicht in der Lage die verlinkten Benchmarks zu überfliegen, um einzusehen, dass BDB weder die schnellste, noch die schlankeste Lösung ist? Ob sie adäquat ist, kann man schlecht beurteilen, dazu hat slick viel zu wenig Randbedingungen angegeben.

Quote:
Außerdem bitte ich auch Necoro anzustänkern, der hat auch „Berkeley DB“ gesagt :-P

Kann er ja auch sagen. Er ist aber in der Lage zu lesen und kennt jetzt mögliche Alternativen. :twisted:
_________________
Je dümmer desto Gnome/KDE.
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Mon Mar 28, 2011 11:42 am    Post subject: Reply with quote

Ich habe mich jetzt für MongoDB entscheiden. Ist vermutlich für den gedachten Einsatzzweck allein deutlich overkill, allerdings wollte ich das sowieso mal testen und auch vlt. anderes damit ausprobieren. Dank euch. Solved

Dürft natürlich gern noch weiter diskutieren...
Back to top
View user's profile Send private message
l3u
Advocate
Advocate


Joined: 26 Jan 2005
Posts: 2616
Location: Konradsreuth (Germany)

PostPosted: Mon Mar 28, 2011 5:55 pm    Post subject: Reply with quote

Nein, jetzt bin ich beleidigt :-P Spaß beiseite, ist ja nett, wenn man was Neues lernt. Und Tokyo Cabinet kannte ich tatsächlich nicht. Werd ich mir mal bei Gelegenheit anschauen.
Back to top
View user's profile Send private message
manuels
Advocate
Advocate


Joined: 22 Nov 2003
Posts: 2146
Location: Europe

PostPosted: Tue Mar 29, 2011 11:07 am    Post subject: Reply with quote

slick wrote:
Ich habe mich jetzt für MongoDB entscheiden. Ist vermutlich für den gedachten Einsatzzweck allein deutlich overkill, allerdings wollte ich das sowieso mal testen und auch vlt. anderes damit ausprobieren. Dank euch. Solved
Wieviele key->value pairs hast du denn jetzt drin?
Kannst du mal schauen, wie lang das auffinden eines Keys benötigt?
_________________
Build your own live cd with catalyst 2.0!
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Tue Mar 29, 2011 1:37 pm    Post subject: Reply with quote

Wird noch was dauern bis ich da Zahlen liefern kann. Bin gerade erst dabei das Gedachte umzusetzen und wird wohl noch was brauchen. Leide momentan unter chronischem Freizeitmangel. (Habe nur tagsüber @Work die Zeit mir darüber Gedanken zu machen bzw. mich zu belesen)

Wenn dann wäre das auch nur virtualisiert, allerdings ist die mysql auch virtualisiert und da stecken die Daten auch noch drin, d.h. ich könnte die beiden mehr oder minder direkt vergleichen. So viel Spielspaß ... so wenig Zeit ...
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Thu Apr 07, 2011 7:26 pm    Post subject: Reply with quote

Also ich habe zwar noch keine Zahlen in Bezug auf die Geschwindigkeit, allerdings ist der Speicherverbrauch von MongoDB echt heftig.

Ich habe eine Textdatei eingelesen, je Zeile 3 String Werte zu je 3-40 Zeichen, insgesamt ca. 6,1. Mio. Datensätze (je eine Zeile in der Mysql Tabelle, entspricht je ein Dokument in MongoDB). Ok, keine reine Key-Value, aber immerhin sehr einfach strukturierte Daten.

Gesamt-Speicherverbrauch auf der Platte (gleiches Dateisystem)

- als reine Textdatei: 295 MB
- als Mysql (MyIsam) incl. 2 Index: 496 MB
- als MongoDB incl. 2 Index: 5,7 GB

Heftig ... hätte ich nicht erwartet.
Back to top
View user's profile Send private message
manuels
Advocate
Advocate


Joined: 22 Nov 2003
Posts: 2146
Location: Europe

PostPosted: Fri Apr 08, 2011 10:34 am    Post subject: Reply with quote

Allerdings! Bekommt jedes Objekt in der DB auch noch eine Standard-ID zugewiesen, oder setzt du die ID mittels einer deiner drei Daten?
_________________
Build your own live cd with catalyst 2.0!
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Fri Apr 08, 2011 11:05 am    Post subject: Reply with quote

Hatte es erstmal bei der zusätzlichen Standard-Id belassen.

Ich habe so gut es ging Standard-Werte verwendet ohne mich vorher tiefer damit zu befassen. Das hat z.B. auch die Auswirkung das alle eingetragenen Werte case-sensitiv sind. Sowohl Werte selbst als auch der Index. (Eine Howto zu case-insensitiven Werten empfahl die Werte doppelt im Dokument abzuspeichern. Einmal case-sensitiv und einmal z.B. in Kleinbuchstaben.) Das macht auch aus Sicht der Suche wieder Sinn, denn eine normale Suche nach Werte ist case-sensitive. Eine case-insensitive Suche ist zwar mittels Expressions möglich, aber da merkt man schon beim einfachen Ausprobieren auf der Console einen deutlichen Performance-Unterschied.

Nichts destotrotz sehe ich die NoSql DBs als interessanten Ansatz mit durchaus Existensberechtigung.
Back to top
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Fri Apr 08, 2011 11:53 am    Post subject: Reply with quote

Es gibt doch genug String Metriken und (perceptual) Hashfunktionen, die case(in)sensitiv sind - Du wirst doch nicht alle Werte auf einen Match hin durchsuchen?! Wenn es um Text allg. geht, fährst Du mit Lucene etc. besser.
_________________
Je dümmer desto Gnome/KDE.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum