Je peux penser à trois solutions - EAV, XML et colonnes éparses. Ce dernier est spécifique au fournisseur et peut ne pas vous être utile.
Quelle que soit la méthode que vous choisissez, vous pouvez envisager de stocker les données de la demande d'origine dans un format brut, dans un tableau ou un fichier plat. Cela vous permettra d'essayer facilement de nouvelles façons de stocker les données, vous permettra de recharger les données si vous découvrez une erreur dans la façon dont vous analysez vos demandes, et offrira des opportunités pour analyser les demandes d'API en utilisant le traitement par lots ou le «big data» si vous constatez que votre entrepôt de données n'est pas en mesure de traiter efficacement les données.
Considérations EAV
EAV / KVS, comme vous l'avez décrit ci-dessus, est probablement la mise en œuvre la plus simple.
Malheureusement, cela va également coûter très cher - pour obtenir toutes sortes de requêtes efficaces sur les clés couramment utilisées, vous aurez besoin d'avoir des index sur la colonne de clé, qui pourraient être très fragmentés. La recherche de clés particulières serait extrêmement coûteuse.
Vous pouvez réduire le coût de l'indexation ou des analyses d'index en prenant en charge votre magasin EAV avec des vues matérialisées (de nombreux fournisseurs le prennent en charge) pour interroger les clés ou les valeurs qui vous intéressent.
XML
La plupart des systèmes de base de données d'entreprise offrent une gestion XML très mature, y compris la validation, l'indexation et l'interrogation sophistiquée.
Le chargement de la demande d'API dans la base de données au format XML fournirait un tuple par demande, ce qui pourrait logiquement être un peu plus acceptable pour vous que d'avoir un nombre inconnu de lignes dans une table EAV.
Que cela soit efficace dépendra beaucoup de votre fournisseur de SGBDR et de votre implémentation.
Le plus gros inconvénient est que c'est probablement le seul moyen de gérer les données qui est plus compliqué que la manipulation de chaîne de la requête d'origine!
Colonnes clairsemées / tables traditionnelles
Il est possible que vous puissiez charger vos données dans une structure de table traditionnelle, avec une colonne par clé.
La fonctionnalité Sparse Columns de SQL Server est une excellente alternative à un magasin EAV. Une table avec des colonnes éparses se comporte à peu près comme une table normale, sauf qu'elle peut avoir jusqu'à 30 000 colonnes, et les valeurs NULL dans les colonnes éparses ne consomment pas d'espace dans la table.
Les combiner avec des index filtrés (une autre fonctionnalité spécifique à SQL Server) peut fournir une alternative extrêmement efficace à un magasin EAV si vous recherchez fréquemment quelques colonnes et / ou valeurs spécifiques.
L'utilisation d'une table traditionnelle avec d'autres fournisseurs peut être viable - IBM prend en charge plus de 700 colonnes par table et Oracle environ 1 000, et des fonctionnalités telles que la compression ou le traitement par Oracle des valeurs nulles finales peuvent signifier que vous pouvez stocker vos données API assez efficacement.
L'inconvénient évident de cette approche est que lorsque vous avez ajouté de nouvelles clés à votre API, vous devez ajuster votre schéma en conséquence.