Frage

Ich bin für eine Datenbank, die die folgenden Funktionen unterstützt:

1) Datensätze in der Datenbank sind wie Python Wörterbücher oder Perl-Hashes. Zum Beispiel so ein „Kauf“ record aussehen:

<purchase 5436> = { product: "BMX Bike", price: 99.50, city: "Springfield" }

2) Die Datensätze werden in Arrays mit variabler Länge gespeichert. Die Datenbank enthält viele dieser Arrays. Zum Beispiel könnte der Kauf Tabelle wie folgt aussehen:

purchase array 1: [ <purchase 5436>, <purchase 54>, <purchase 112> ]
purchase array 2: [ <purchase 76>, <purchase 5984>, <purchase 1102>, <purchase 12> ]
...
purchase array 658: [ <purchase 10142>, <purchase 35>, <purchase 6458>, <purchase 23> ]

3) ich auf dieser Datenbank zu tun, zwei Arten von Anfragen in der Lage sein wollen:

3a) Zählen Sie die Anzahl der Datensätze, die ein verschiedenen Kriterien entsprechen. Zum Beispiel, wie viele Käufe wurden mit einem Wert über 50 gemacht? Ich kenne viele Datenbanken, die dies unterstützen.

3b) Zählen Sie die Anzahl der Datensätze in einer bestimmten Reihenfolge angezeigt werden. Zum Beispiel, wie viele Arrays sind ein Kauf über 50 dort wurde hergestellt und dann ein Kauf in „Springfield“ wurde gemacht? Ich weiß nicht, welche Art von Datenbank würden Sie, dies zu tun verwenden.

bearbeiten: Antwort auf Steve Haigh: ich, dass Geschwindigkeit ist wichtig, erwähnt haben soll, und diese Datenbank benötigt Gigabyte an Daten zu unterstützen. Zum Beispiel könnte es eine Milliarde Kauf Arrays sein, und ich möchte zählen, wie viele von ihnen in „Springfield“ einen Kauf haben, gefolgt von einem Kauf in „Heimatstadt“ (beachten Sie, dass wichtig ist,). Vielleicht bin ich falsch, aber ich denke, ein relationales DB für diesen Zweck zu langsam wäre.

War es hilfreich?

Lösung

Sind Sie sicher, dass Sie diese mit einer relationalen DB nicht tun können, einen Link oder eine Verknüpfungstabelle mit?

Sie würden eine Spalte von Aufträgen haben, eine Spalte von Produkten und eine Tabelle, um Produkte, die eine Zeile für jedes Produkt je Auftrag hat.

Ich denke, diese Artikel rel="nofollow wahrscheinlich besser zum Ausdruck bringt, als ich konnte.

Andere Tipps

  

Zum Beispiel könnte es sein,   1000000000 Kauf Arrays und ich   zählen wollen, wie viele von ihnen haben eine   kaufen in „Springfield“, gefolgt von   ein Kauf in „Heimatstadt“ (beachten Sie, dass   Reihenfolge ist wichtig). Vielleicht bin ich falsch,   aber ich denke, ein relationales DB wäre   zu langsam für diesen Zweck.

Was Sie beschreiben, sind typische Data Warehouse und AFAIK sind solche in der Regel umgesetzt relational mit DBs, wenn auch diejenigen, die eher für die Berichterstattung als für die gleichzeitige Transaktionsverarbeitung optimiert sind. Allerdings glaube ich nicht, der Unterschied in der Geschwindigkeit extrem sein, wenn Sie einen „regulären“ RDBMS verwenden. wenn Sie genug Geld, natürlich haben, könnten Sie für einen speziellen Data Warehouse DBMS gehen.

Der wichtigste Einfluss auf die Geschwindigkeit wird die 1 sein) eine Technologie für Quering große Disk-basierten Datensätzen optimiert - das ist genau das, was alle „echten“ DMBSs Angebot und 2) Daten in der richtigen Art und Weise organisiert.

  

3b) Zählen Sie die Anzahl der Datensätze   erscheinen in einer bestimmten Reihenfolge. Zum   Beispiel, wie viele Felder gibt es   ein Kauf über 50 war, wurde hergestellt und   dann war ein Kauf in „Springfield“   gemacht? Ich weiß nicht, welche Art von   Datenbank Sie würden es tun verwenden.

Sie würden eine relationale DB verwenden mit ein Schema entwickelt, diese Art von Abfrage zu unterstützen. Sie gehen zu müssen, aufgeben sollte Ihr Vorurteil, wie die Daten dargestellt werden.

Sie brauchen nicht wirklich eine relationale Datenbank, wie Sie gerade Tasten- haben> Wertepaare in Sammlungen gruppiert, müssten Sie zwischen den beiden Tabellen (eine für die Datensätze, einen für die Sammlungen) schließt sich die Datensätze in ein iterieren Sammlung und in Ihrem Fall sind die Kosten nicht wert.

Für Ihre Leistungsanforderungen, was Sie brauchen, ist sicher zu stellen, dass die gesamte Struktur in den Speicher passt und erfordert keinen Zugriff auf die Festplatte. Sie könnten mehrere Server benötigen, dies zu tun, und ein Meister, der die Abfragen an die anderen Server sendet (vorausgesetzt, dass die Größe der Struktur ist größer als die angemessene Menge an Speicher, die ein moderner Server verarbeiten kann, und dass Ihre Geschwindigkeit Anforderungen sind so groß, dass man nicht Scheibe Paginierung leisten kann.

Für die Art von Fragen, die Sie erwähnen, Ihre beste Möglichkeit ist, ein wenig Datenredundanz zu haben. Auf Einfügungen, würden Sie Spur dieser Zählungen halten. Datenredundanz Zelte Leute ausflippen nur durch den Namen zu lesen, aber es ist manchmal notwendig. Seien Sie sehr vorsichtig bei der Implementierung und investiert hier eine gute Menge an Unit-Tests.

Es könnte sein, aber eine Art von Abfragen, dass Sie nicht immer in der Lage sein werden, in Echtzeit in einer Angelegenheit von miliseconds zu tun, und dass man über die Suche nach Käufen mit einer Bedingung, die durch Käufe gefolgt mit einem anderen Zustand wie scheint diese. Entweder finden Sie einen Weg, um eine Live-Tracking dieser Zahlen zu halten, während das Einfügen / Löschen / Ändern oder Sie müssen actualy Ihre Millionen von Arrays iterieren, keine Möglichkeit, das zu vermeiden. Sie beachten müssen, wie die jüngsten Daten sein muss, und vielleicht alle paar Stunden vor-berechnen, diese Statistiken zu erstellen und dann in der Lage sein, sie in O zuzugreifen (1) mit Lookup-Tasten.

Auf den Punkt gebracht, ist Ihr Problem weit über die Technologie, die Sie sich entscheiden, es zu lösen, zu verwenden.

Ich bin nicht sicher, ob ich völlig verstehen, was Sie suchen, aber haben Sie sich couchdb ? . Sein Dokument orientiert und Schema frei

Was Sie beschreiben, ist ganz ähnlich wie MUMPS auch wenn ich einige Zweifel an der haben Möglichkeit, Abfragen zu definieren, wo die Reihenfolge der „Aufzeichnungen“ in der Arrays möglich ist.

Haben Sie einen Blick auf den Link, gibt es auch aktuelle kommerzielle Versionen von dieser, wie Sie sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top