2017-06-09 3 views
0

Schauen wir uns diese Datenbankstruktur aussehenWie optimiert man die Speicherung dieser Daten in MySQL?

Iterations 
    id (primary key) 
    start (timestamp) 
    end (timestamp nullable) 

Items 
    id (primary key) 
    title (text) 
    foreign_id (integer) 
    location (point nullable) 
    some other text fields 

Iteration_items 
    iteration_id (foreign key to iterations(id)) 
    item_id (foreign key to items(id)) 

Jede Stunde

1. Create new record in `iterations` with `start` equals to now 
2. Do some processing and store about 5000 records in `items` table (plus 5000 records in `iteration_items`), so every `iteration` contains about 5000 items. 
3. After it is done set `end` to now for latest `iteration` 

Problem: jede iteration (meist in items Tabelle) dauert etwa 100 MB Festplattendaten kann ich diese Daten in irgendeiner Weise nicht zip (Es ist ein Text drin).

Es kann mehr Duplikate:

1. Iteration 34 contains item with foreign id 837435. 
2. Iteration 35 contains item with foreign id 837453 
3. ... 
4. Iteration 42 DOES not contain item with foreign id 837453 

Daten in Artikeln mit ausländischer ID 837435 kann zwischen Iterationen geändert werden.

Zum Beispiel:

iteration 34 
     point(1.1,2.2) 
     title 'some example text' 
    iteration 35 
     point(1.1, 2.3) 
     title 'another example text' 

Ich brauche diese Daten zu speichern, so dass später kann sie verglichen werden.

Wie man mit kontinuierlich wachsender Datenbank umgeht?

Antwort

1

Eine schnell wachsende Datenbank ist sozusagen nicht "problematisch", vor allem wenn die Struktur wie Ihre solide ist. Auf der anderen Seite, wenn Sie sagen "Speichern Sie diese Daten, so dass es später verglichen werden kann" fühlt sich an, als ob Sie eine analytische Datenbank benötigen, um Ihre MySql zu ergänzen. Diese Art von Software wurde entwickelt, um große Datenmengen zu speichern (ohne enormen Speicherplatz zu beanspruchen) und blitzschnell abzufragen.

Vielleicht sollten Sie in Betracht ziehen, nur die neuesten Daten in Ihrer MySql-Datenbank zu speichern und regelmäßig mit einem Data Warehouse zu synchronisieren. Das würde wahrscheinlich viel besser skalieren.

Haben Sie einen Blick auf diesen Artikel, es ein paar nette Vorschläge hat:

Choosing a Database

Auch hier sind ein paar persönliche, die Sie in Erwägung ziehen könnte:

Infobright: MySQLs Data-Warehousing-Lösung. Kostenlose Community-Edition, mit der Sie nur Daten einfügen, nicht ändern können. Integriert sich perfekt mit MySql.

PostgreSQL: Nicht in der Regel ein Data Warehouse, aber kann immer noch sehr große Datenmengen wirklich gut behandeln und Leistung auf einem anständigen Niveau halten.

Vertica: HP-Lösung, hat eine kostenlose Community-Edition. Super schnell und leistungsfähig, kann aber schwierig mit einigen Dingen wie PHP (dem, den wir derzeit verwenden, wo ich arbeite) zu integrieren sein.

Verwandte Themen