0

У меня есть объем данных Oracle, который, как я думаю, вызван проблемой представления данных. У меня есть иерархия, состоящая из семи разных списков, и вам нужно сохранить все уникальные потенциальные комбинации этих элементов. Мне нужно сохранить все возможные комбинации, потому что мне нужно хранить дополнительную информацию вместе с ними.Oracle, представляющий иерархию комбинаций данных

Исторически сложилось так, что мы управляем четырьмя списками, которые пришли к нескольким тысячам комбинаций. Это было прекрасно, но требования изменились, поскольку они привыкли делать, и теперь мы запускаем семь списков. В моей реальной среде списки хранят от 20 до 200 элементов. Общее количество комбинаций для этого сейчас, невероятно, составляет около 350 миллиардов.

В качестве примера того, что мы пытаемся представить с этим, вы могли бы иметь выбор списков, как:

Цвета: красный, зеленый, синий

фигуры: круг, квадрат, треугольник

Вкусы: Персик, банан, малин

Они будут храниться в виде отдельных таблиц в Oracle, как цвет, форма, ароматизаторы и т.д., и что мы будем делать это умножая их все вместе (через декартовый присоединиться) для получения таблицы взорванных тел: Thi s - это то, что мы храним в Oracle на данный момент.

COLOUR SHAPE FLAVOUR DATA_1 DATA_2 
Red  Circle Peach  -- these hold additional information 
Red  Circle Banana 
Red  Circle Raspberry 
Red  Square Peach 
Red  Square Banana 
... 

и так далее.

Мы обнаружили, что мы не можем хранить миллиарды записей в таблице Oracle и выполнять любую операцию, выполняемую на них своевременно. Я пытался думать о разных способах хранения этой информации, но мой мозг постоянно забивает количество комбинаций. Есть ли что-нибудь, что я могу сделать, чтобы хранить записи по-другому? Принимая во внимание, что это все уникальные комбинации, нам нужно хранить данные вместе с ними.

Спасибо за помощь!

+1

Вам действительно нужно хранить данные о каждой возможной комбинации? Где эти 350 миллиардов единиц информации (или 700 миллиардов, если вы храните по два для каждого)? Если вы этого не сделаете, и значительная часть ваших полей данных на самом деле равна нулю, то насколько велика будет разреженное представление - если вы только сохраняете записи по мере необходимости, когда данные существуют для присоединения к комбинации? –

+0

@AlexPoole Мы не думаем, что можем использовать разреженное представление - ни одно из полей данных не будет равно нулю, и пользователь может запросить информацию о любой из комбинаций по желанию. – Kieran

ответ

0

В конце концов, мы решили сворачивать списки, чтобы вместо того, чтобы иметь много миллионов строк, у нас есть выбор таблиц со многими столбцами. Это не идеальный подход, но он имеет некоторые преимущества для других.

0

Как насчет хранения данных в нереляционной базе данных?

Я бы порекомендовал MongoDB или Hypertable.

+0

Мы действительно рассматривали это, но не видели простого способа генерации Декартово произведение таблиц списков быстро в MongoDB - мы не знакомы с ним. Можете ли вы предложить какую-либо помощь там? спасибо – Kieran

+0

Что касается хранения таблиц списка в Oracle DB, выберите через приложение (простой код на любом языке) декартовой продукции и просто сохраните его в Mongo. –