Frage

Im Moment arbeite ich an einem Projekt, das auf Android basiert. Ohne in vielen Details, die Software wird auf einem speziell angefertigten Gerät ausgeführt. Die Hardware wird sich nie ändern und wird immer die gleiche sein. Das ist ein großes Plus:)

Mit diesem wird gesagt, dieses Projekt erfordert uns Lasten zu speichern und zu Lasten von Daten auf dem Gerät - Upwards von 3 m Zeilen in einigen Tabellen. SQLite Griffe Scannen so viele Reihen gut für uns, kommt das Problem in, wenn wir tun beginnen Komplex schließt sich alle in Zusammenhang stehende Daten, um wieder die wir brauchen. Wir haben darüber nachgedacht, die Datenbank Denormalisierung aber Angst haben, dass die Datenbank außerhalb des Bereichs der nutzbaren vorantreiben wird.

Wir suchen in eine objektorientierte Datenbank, so etwas wie db4o oder NeoDatis. Unsere Hoffnung ist, dass durch Objekte zu speichern wir loswerden unsere Beziehungen auf Zeilenebene erhalten und speichern sie auf dem Objekt (wie OOP). Das Problem ist, dass wir nicht in der Lage gewesen, eine leistungsbezogene Benchmarks zu finden (zumindest nicht jüngere) diese ODBS läuft und auf Android verwendet wird.

hat jemand Erfahrung mit OODBs auf Android und / oder mit der Speicherung und diese große Menge an Daten zugreifen? Wenn ja irgendwelche Ratschläge Sie würde bieten könnte sehr geschätzt.

- Bearbeiten

Hier ist ein Beispiel für das Problem, das wir konfrontiert sind. Es ist nicht im Zusammenhang mit unserer App (mein NDA sagt, ich kann nicht Beitrag etwas Bestimmtes), aber dieses Beispiel zeigt das Problem gut.

Stellen wir eine Anwendung Gebäude sind jedes Fahrzeug zu überwachen, die zu einem bestimmten Zeitpunkt auf dem New Jersey Turnpike fahren. Für jedes gegebenes Auto brauchen wir das Auto Marke und Modell zu verfolgen, wie viele Menschen im Auto sind und was die demografische der Menschen im Auto. Also im Grunde Sie mit Daten am Ende, dass so etwas aussieht -

Auto

id | Farbe | make_id | in_toll_lane | MODEL_ID

make

id | Name

Modell

id | Name | make_id

car_person

id | Alter | sex | is_driver | car_id

toll_lanes

id | cars_in_line | ideal_cars_in_line | ideal_occupants

Diese Daten gehen häufig wechselnden werden. Es wird auch ziemlich riesig zu bekommen, da gibt es keine Zweifel, eine Menge Leute, die NJ Pike zu einem bestimmten Zeitpunkt zu senken.

Mit diesen Daten benötigen wir eine Momentaufnahme, auf Nachfrage der Lage sein, von jedem, der auf dem Hecht fährt. Wir brauchen auch eine Momentaufnahme aller Männlichen zu ergreifen, um der Lage sein, die gerade unterwegs sind, oder alle Frauen auf der Turnpike. Wir müssen auch nach Alter suchen zu können, Sex, Marke, Modell, etc.

Nun stellen wir brauchen, um herauszufinden, was toll jedes Auto Fahrspur sollte in basierend auf der Anzahl von Menschen im Auto gehen, die idealen Anzahl der Insassen, die Anzahl der Autos bereits in der Linie, und die idealen Anzahl von Autos, die sollten sein in der Schlange.

Dies ist ein sehr einfaches Beispiel, wenn auch ziemlich repräsentativ für unser Problem.

- Ende Bearbeiten

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Hier sind einige Beobachtungen, obwohl ich es vermute, Sie werden nicht direkt helfen.

Ich denke, die wichtigsten Fragen sind: Werden Sie Ihre komplexen Beziehungen über Anwendungslaufzeitlogik entdecken als Ereignisse erzeugen oder Änderungsdaten oder wollen Sie nur Dump-Daten in einen Speicher haben und dann entdecken un-antizipieren Beziehungen über Abfrage ?

Wenn Sie Ihre Business-Logik wird das Modell bevölkern dann können Sie leicht modellbasierte Ansichten Ihrer verschiedenen Schichten des Datenmodells erstellen z.B. Sammlungen, die alle Autos mit männlichen / weiblichen Fahrer wissen. In diesem Fall grundsätzlich sind, Ihre Beziehungen halbstatischen selten ändert (während Datenwerte am anderen Ende dieser Beziehungen sind wahrscheinlich viel ändern). Wenn dies der Fall ist, warum dann versuchen, die Daten in einer Datenbank-Technologie zu speichern, die Sie ständig zwingen, um die Beziehungen neu zu berechnen (JOIN). Es ist nur eine Verschwendung von CPU und ist, warum Sie die schlechte Leistung sehen, wie das Modell komplexer wird. Also, wenn Sie diese Fragen zu beantworten, wird es sehr klar, wenn ODB oder RDB beste Wahl ist.

Nun wird die Frage, was auf Android laufen und große Daten umgehen? Dies ist, wo ich denke, ich kann nicht helfen. Ich arbeite bei Versant, der hat (db4o und Versant) ODB. Jetzt wird db4o auf Android laufen, aber eigentlich ist es richtige Wahl für große Daten ... Nein, nicht, es sei denn Sie haben sehr Daten isoliert, die nur in Isolation in getrennten Datenbanken und zugegriffen werden kann, und es klingt nicht zu mir wie es ist, Situation. Unsere andere Datenbank, Versant ist mean't riesige Daten nahezu in Echtzeit zu verarbeiten, aber nur der Kunde 100% Java, der Server in C geschrieben ist, so dass es auf Android nicht ausgeführt wird.

Ich glaube, Sie müssen einige der Forschung tun, um zu sehen, wer ODB hat, die große Datenmengen auf Android verarbeiten kann.

Best, -Robert

Andere Tipps

Sie sagen nicht viel über Ihre Datenzugriffsanforderungen oder die Daten loadout wirklich.

Wenn Sie 3M Haupt Reihen haben, und dann ein paar kleinere Blatt Tabellen, dann können Sie nur gut tun, indem alle Blatt Tabellen im RAM Caching und „Verbinden“, um sie von Hand. Viele Systeme haben sehr kleine Blatttabellen (vor allem im Vergleich zu den Hauptdaten), so dass sie im RAM so geladen und dann einfach auf der Suche sich auf, wenn Sie die Zeile laden kann ein großer Gewinn sein.

Offensichtlich Sie tun dies nicht mit großen Eltern-> Kind-Beziehungen, aber wenn Sie das Blatt verbindet beseitigen können, dann werden ein Lese eine einzige Verbindung zwischen dem Elternteil und Kind eher als ein halbes Dutzend zu Eltern, Kind, und Blatt-Tabellen.

Auch wenn dies nicht funktioniert für alle Blätter Tabellen, wenn es für eine große Mehrheit arbeitet, kann es gut genug, um Sie über den Buckel zu bekommen.

Beim Reden für db4o. Wir führen alle unsere Regressionstests auf Android, weil wir denken, dass es eine sehr wichtige Plattform für db4o werden wird

db4o funktioniert sehr gut für die Größenordnung von 3 Millionen Objekte.

Wir tun Benchmark-Tests gegen andere Datenbanken auf http://www.polepos.org/ und wir wird in Kürze eine neue Version der Benchmark-Release, wo wir einen komplexen Setup, auch gegen SqlLite laufen. die Benchmark für Android Portieren ist auch eine Überlegung.

Wenn Joins sind Ihre Leistung zu töten, und Sie haben sehr heterogene Daten, db4o als eine relationale Datenbank besser funktionieren könnte.

Ihre App klingt interessant. Wenn Sie Hilfe Auswertung db4o benötigen, geben Sie mir nur einen Schrei.

Jason: für das Erreichen jedes db4o Mitglied müssen Sie dieses Muster verwenden: Vorname @ db4o.com Best!

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