ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Datenbanknutzung mit Ruby
BeitragVerfasst: 13 Nov 2011, 17:17 
Offline
Nuby

Registriert: 13 Nov 2011, 16:53
Beiträge: 2
Hi erstmal,
ich hab folgendes Problem. Ich schreib aktuell ein Programm das Handhistorys von Pokerspielen statistisch auswertet. Die Handhistorys sind so 2-3 kb groß. Und ich hab einige 100k es können aber auch ein paar Millionen werden. Die Handhistorys parse ich in eine Datenstruktur bestehend aus Hashs und Arrays um sie auswertbar zu machen. Zu jeder Textdatei kommt also auch noch ein Dump der Datenstruktur hinzu die dauerhaft gespeichert werden muss. Also schon nen paar GB an Daten mit den herumhantiert wird. Das einfach alles in einen Ordner als einzelne Dateien zu schmeißen überfordert natürlich das Dateisystem und führt zu ewig langen Laufzeiten bei der Auswertung.
Genau dafür wurden wohl Datenbanksysteme erfunden. Ich hab allerdings keine Ahnung von sowas und bei der Auswahl an Datenbanken hab ich keinen Schimmer was man da nimmt zumal ich verschiedene Anforderungen habe:
- Die Textdateien selber müssen eigentlich nur identifizierbar per ID in nen Container um sie eventuell irgendwann nochmal neu zu parsen.
- Die Datenstrukturen muss ich allerdings schnell durchsuchen, nach bestimmten Merkmalen filtern und teilweise erweitern/ändern können, das heißt hier zählt Geschwindigkeit und Resourcenverbrauch.

Vielleicht kennt sich ja jemand da aus. Wär super wenn ihr mir nen paar Ideen geben könnt.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Datenbanknutzung mit Ruby
BeitragVerfasst: 13 Nov 2011, 20:49 
Offline
Metaprogrammierer

Registriert: 03 Feb 2008, 15:36
Beiträge: 682
Wohnort: Aachen, NRW
Klingt nach einem guten Einsatzzweck einer SQl-Datenbank. Varianten gibt es da genug.
Zum ersten antesten bietet sich beispielsweise SQlite an, nachher kannst du dann auf einen echten Datenbankserver umsteigen.

Dazu dann eins der vielen ORMs verwenden und das austauschen des Backends ist eine Kleinigkeit.

_________________
-


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Datenbanknutzung mit Ruby
BeitragVerfasst: 14 Nov 2011, 00:06 
Offline
Son-shi

Registriert: 23 Feb 2004, 14:59
Beiträge: 941
Wohnort: Esslingen
Als Ergänzung zu BadBoys Antwort:
ORM ist ein Objekt-Relationaler-Mapper. Mal ganz salopp: EIne Zwischenschicht zwischen Ruby und der Datenbank, mit der man Ruby-like DB-Anfragen machen kann.

Ein kleiner Vergleich zu "ORM" hat es bei
http://ruby.lickert.net/db_mapper/index.html

_________________
http://ruby.lickert.net/
http://gems.rubypla.net/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Datenbanknutzung mit Ruby
BeitragVerfasst: 14 Nov 2011, 07:03 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4872
Wohnort: RLP
Peng hat geschrieben:
- Die Datenstrukturen muss ich allerdings schnell durchsuchen, nach bestimmten Merkmalen filtern und teilweise erweitern/ändern können, das heißt hier zählt Geschwindigkeit und Resourcenverbrauch.


Heisst "nach bestimmten": "nach bestimmten, aber festen" oder "nach arbiträren Kombinationen von Merkmalen"?

Gruß,
Skade


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Datenbanknutzung mit Ruby
BeitragVerfasst: 14 Nov 2011, 09:46 
Offline
Nuby

Registriert: 13 Nov 2011, 16:53
Beiträge: 2
Ich denke mal zweiteres. Aber ich geb mal nen Beispiel:


1
2
3
4
5
6
7
8
9
game_8532063 = {moves: [[:call, 10, false], [:fold, nil, nil], [:raise, 20, true], ...],
num_plrs: 8,
limit_type: :fixed_limit,
plrs: %w[peter kevin rudolf tanja ..]}
#der hash enth��lt noch mehr daten ich hab hier nur mal nen paar relevante zusammengepackt

db = [game_8532063, game_643643, game_5327547, game_865845, ..]
#oder besser
db = {8532063 => game_8532063, 643643 => game_643643, 5327547 => game_5327547, 865845 => game_865845, ..}

Ein query (nennt man so oder?) würde wohl so aussehen (mit der der zweiten db variante):


1
2
3
4
5
6
results = db.values.select do |g|
g[:num_plrs] == 6 and
g[:moves][0][0] == :fold and g[:moves][1][0] == :raise and g[:moves][2][0] == :call and #hier w��rd ich nat��rlich noch ne entsprechende funktion schreiben die mir das vergleichen vereinfacht
g[:limit_type] == :fixed_limit and
g[:plrs][3] == 'Tanja' #oder je nach dem: g[:plrs].include? 'Tanja'
end


Es könnte natürlich auch noch die Zeit, der Tisch, die Stakes und ähnliches mit einbezogen werden. Weiß jetzt nicht in wieweit ihr Poker kennt aber ich hoffe das Beispiel kann man verstehen.
Und danke schonmal für die bisherigen Antworten. Ich werd mir SQL und SQlite und die entsprechenden Gems mal angucken und mich dann hier wieder melden. Aber postet ruhig weitere Vorschläge.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron