Можно ли увеличить максимальное количество столбцов базы данных Oracle для хранения огромных массивов? - PullRequest
0 голосов
/ 16 января 2009

По независящим от меня причинам мне нужно хранить огромные массивы (более 10000 записей) в строках базы данных, и должен быть простой доступ к каждому индексу массива в отдельности, что означает, что я бы лучше избегал сериализации / больших двоичных объектов , если это вообще возможно.

Итак, моя первая идея и актуальный вопрос: можно ли в любом случае увеличить максимальное количество столбцов для Oracle?

Или есть простой способ сказать, сохранить массив на несколько строк и скрыть реализацию под поверхностью (я думаю, здесь хранимая процедура).

Любые другие предложения также приветствуются!

Ответы [ 3 ]

5 голосов
/ 16 января 2009

Максимальное количество столбцов является ограничением механизма базы данных. Так что не повезло.

Я не знаю, сколько строк будет содержать ваша база данных, но это может быть решением использовать таблицу, которая хранит три поля: ArrayId, FieldIndex, Contents. Каждое поле массива представляет собой одну строку в базе данных. Если вы поместите комбинированный индекс в ArrayId и FieldIndex, доступ должен быть довольно быстрым.

Это решение также позволило бы использовать массивы переменной длины.

2 голосов
/ 16 января 2009

Почему бы не сохранить массив как BLOB-объект?

Маловероятно, чтобы кто-либо когда-либо кодировал «Где Acol999 = 42 или Acol1000 = 42 ...» в SQL, поэтому, если вы просто хотите сохранить и извлечь, чем хранить его как большой сгусток или большой двоичный объект в зависимости от ваших данных.

Это будет намного быстрее и потребует гораздо меньше кода.

Если вы действительно хотите запросить содержимое, то вам действительно нужна отдельная таблица с 1 - ОДНОЙ строкой на ячейку массива. После этого вы сможете сделать разумный запрос.

CREATE TABLE ARRAY_CELLS (
     PARENT_ID INT NOT NULL,
     INDEXNUM  INT NOT NULL,
     VALUEOF   LONG NOT NULL
    PRIMARY KEY(PARENT_ID,INDEXNUM)
);

Затем вы можете запускать запросы, такие как: -

 SELECT PARENT_ID from TABLE_ARRAY_CELLS WHERE VALUEOF = 42 GROUP BY PARENT_ID;

Что даст вам список всех массивов, которые содержат значение 42.

2 голосов
/ 16 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...