Я можу придумати три рішення - EAV, XML та розріджені стовпці. Останній є специфічним для продавця і може не бути корисним вам.
Який би метод ви не вибрали, ви можете розглянути можливість зберігання вихідних даних запиту в необробленому форматі, в таблиці або плоскому файлі. Це дозволить легко спробувати нові способи зберігання даних, дозволить перезавантажити дані, якщо ви виявите помилку з тим, як ви аналізуєте ваші запити, і запропонує можливості для аналізу запитів API за допомогою пакетної обробки або "великих даних" інструменти, якщо ви виявите, що ваш сховище даних не в змозі ефективно працювати з даними.
Міркування EAV
EAV / KVS, як ви це описали вище, швидше за все, буде найбільш простою реалізацією.
На жаль, це також буде дуже дорогим - щоб отримувати будь-які ефективні запити на часто використовуваних клавішах, вам потрібно мати індекси на стовпчиках ключів, які можуть бути дуже фрагментарними. Запит на конкретні ключі був би надзвичайно дорогим.
Можливо, ви зможете знизити витрати на індексацію або сканування покажчиків, підтримуючи свій магазин EAV з матеріалізованими поданнями (багато постачальників це підтримують) для запитів ключів або значень, які вас цікавлять.
XML
Більшість корпоративних систем баз даних пропонують дуже зрілі обробки XML, включаючи перевірку, індексацію та складні запити.
Завантаження запиту API в базу даних як XML забезпечить один кордон на запит, що, логічно, може бути трохи приємніше для вас, ніж невідоме число рядків у таблиці EAV.
Чи буде це ефективно, багато що залежатиме від вашого постачальника RDBMS та вашої реалізації.
Найбільшим недоліком є те, що це, мабуть, єдиний спосіб управління даними, який є складнішим, ніж обробна обробка оригінального запиту!
Рідкі стовпці / традиційні таблиці
Можливо, ви можете завантажити свої дані в традиційну структуру таблиці з одним стовпцем на ключ.
Функція розріджених стовпців SQL Server є чудовою альтернативою магазину EAV. Таблиця з розрідженими стовпцями поводиться приблизно так само, як у звичайній таблиці, за винятком того, що вона може містити до 30 000 стовпців, а значення NULL у розріджених стовпцях не потребують місця в таблиці.
Поєднання їх з відфільтрованими індексами (ще одна особливість SQL Server) може стати надзвичайно ефективною альтернативою магазину EAV, якщо ви часто запитуєте кілька конкретних стовпців та / або значень.
Використання традиційної таблиці з іншими постачальниками може бути життєздатним - IBM підтримує понад 700 стовпців на таблицю, а Oracle близько 1000, а такі функції, як стиснення або обробка Oracle відслідковуючими нулями, можуть означати, що ви можете зберігати свої дані API досить ефективно.
Очевидним недоліком цього підходу є те, що, додаючи нові ключі до свого API, вам потрібно буде відповідно налаштувати схему.