Ich habe mir die Daten angeschaut. Warum denken Sie überhaupt daran, die Daten in einer Datenbank zu speichern? Ich nehme an, Sie wollen die Daten lesen, einen Algorithmus darauf anwenden und ein Ergebnis berechnen, richtig? Oder ist es tatsächlich erforderlich, die Daten dauerhaft zu speichern, oder ist das sogar alles, was Sie versuchen zu tun?
Ihre Listen scheinen alle das folgende Format zu haben:
[KillsByEnemyTypeClass] => Array
(
[0] => stdClass Object
(
[Key] => 0
[Value] => 0
)
...
[MedalCountsByType] => Array
(
[0] => stdClass Object
(
[Key] => 0
[Value] => 0
)
Wie das Datenformat andeutet, handelt es sich bei den Listen um aufeinanderfolgende Arrays und nicht um Schlüssel-Wert-Paare. Da die Schlüssel alle fortlaufend sind, können Sie die Werte in einem großen Array in einer Programmiersprache Ihrer Wahl speichern.
Dies ist Ihr Datenformat:
struct Data {
std::string reason;
int status;
struct AiStatistics {
int aDeathsByDamageType[82];
int nHopperId;
int aKillsByDamageType[82];
int nMapId;
double fMedalChestCompletionPercentage;
int aMedalCountsByType[128];
int nTotalMedals;
int nVariantClass;
...
} aaistatistics[9];
}
Es sieht so aus, als ob die Felder eine statische Größe haben müssen, denn die 82 verschiedenen Schadensarten werden Ihnen wahrscheinlich etwas sagen. Wenn es plötzlich 83 Schadensarten gibt, hat sich das Programm, das diese Daten generiert, geändert, und Sie müssen Ihre Algorithmen ebenfalls anpassen. Das bedeutet, dass die Daten und Ihr Programm nicht unabhängig sind und die Vorteile der Verwendung einer Datenbank fragwürdig sind.
更新情報
Vielen Dank für die Klarstellung Ihrer Anforderungen. Ich verstehe jetzt, warum Sie die Daten für andere Kunden zwischenspeichern müssen.
Aber: Sind die Daten, die Sie verknüpft haben, alle Daten, die Sie speichern müssen? Das heißt, Sie zwischenspeichern nur die Ausgabe der Web-API, und wenn sich die Ausgabe ändert, überschreiben Sie die zuvor gespeicherten Daten? Oder gibt es eine zeitliche Dimension und Sie wollen die Abfolge der Ausgaben der API speichern? In beiden Fällen könnte eine dünne C++-API um die binären Daten herum viel effizienter sein als eine Datenbank.
Wenn es nur für die Zwischenspeicherung der Daten, würde ich immer noch vorschlagen, die Datenbank nach dem Objektmodell oben zu modellieren. Die AI-Statistik-Tabelle hat eine Spalte pro Mitgliedsvariable, d.h. eine Spalte für das komplette DeathsByDamageType-Array. Speichern Sie das gesamte Array als einen Wert. Clients können mit diesem Modell nicht einen einzelnen Wert nachschlagen, sondern müssen das gesamte Array erhalten. Wenn Sie keinen konkreten Anwendungsfall für etwas anderes haben, würde ich bei diesem Modell bleiben. Ihre Datenbank wird viel einfacher sein.
Wenn dies für Ihre Zwecke wirklich nicht ausreicht, dann sind es wahrscheinlich Ihre Tabellen:
table Data { id, reason, status }
table AiStatistics { id, data_id, ..., all integer members like nTotalMedals etc }
table DeathByDamageType { aistat_type, index, value }
table ... for every other array member of AiStatistics
Standardmäßig ist die Speicherung von DeathByDamageType auf diese Weise wirklich platzraubend, die Tabelle ist mindestens dreimal so groß wie die Array-Werte, da für jeden Wert die AiStatistics-Referenz-ID und der Array-Index separat gespeichert werden müssen.
Wenn Sie es auf diese Weise tun, nutzen Sie zumindest die Sparsamkeit in den Arrays und speichern Sie keine Werte in DeathByDamageType, die 0 sind. Sie könnten dies nicht mit dem Array tun.