Удалить первичный индекс из berkeley db

Я использую java версию BerkeleyDB, DPL.

При анализе данных в BerkeleyDB я сохраняю некоторую временную информацию в конкретном PrimaryIndex. Этот PrimaryIndex занимает много места, и я хочу удалить все данные, хранящиеся там, и освободить место, используемое на HD.

Каков самый простой способ сделать это?

Спасибо.


person jutky    schedule 08.01.2012    source источник


Ответы (3)


В принципе вам может понадобиться:

  • Измените структуру таблицы, чтобы изменить первичный индекс на другой столбец, поскольку таблицам BDB требуется первичный ключ.
  • Измените структуру таблицы, чтобы удалить столбец, который вам больше не нужен.

Питер прав, нам нужны более конкретные детали (например, структура таблицы DDL), прежде чем мы сможем дать вам какие-либо конкретные ответы.

Видеть:

person Dan Hardiker    schedule 08.01.2012
comment
У меня нет структуры таблиц, я использую Direct Persistence Layer (DPL). Мои Java-объекты хранятся в BTrees, я просто указываю первичные ключи (с аннотациями) для этих объектов. - person jutky; 08.01.2012
comment
Извините - я пропустил первую строку вашего вопроса. Я использовал BDB только через обработчик SQL (например, MySQL). Я думаю, что Питер прав - вам, вероятно, потребуется создать новую структуру данных и перенести в нее данные. - person Dan Hardiker; 08.01.2012

Не зная более подробной информации, вам может потребоваться перезаписать данные без информации, которую вы хотите удалить. Однако, если вы не хотите сэкономить сотни ГБ, я бы не стал беспокоиться. Я бы получил больше места на диске, если вам это нужно.

person Peter Lawrey    schedule 08.01.2012
comment
Моя база данных составляет ~ 45 Гб, и я подозреваю, что половина этой временной информации мне не нужна. Нет ли эквивалента DROP TABLE в BDB? - person jutky; 08.01.2012
comment
DROP TABLE удалит всю таблицу и всю информацию (а не только столбец, от которого вы хотите избавиться), я подозреваю, что вы хотите эффективно ALTER TABLE. - person Dan Hardiker; 08.01.2012
comment
20 ГБ стоят около 1 фунта стерлингов. Это стоит сделать, если это просто, но я подозреваю, что это не так, и, возможно, не стоит беспокоиться. - person Peter Lawrey; 08.01.2012

Я считаю, что вам нужно будет сделать следующее:

  1. Создайте новую структуру таблицы с желаемой архитектурой.
  2. Прочитайте каждую строку из старой структуры и перенесите ее в новую структуру, изменяя ее по мере продвижения (удаляя/иным образом изменяя данные).
  3. Если вам не хватает свободного места, даже временно, удалите данные из старой таблицы по мере необходимости.

Подходит ли вышеизложенное, будет зависеть от деталей.

Это было бы проще с базой данных SQL, используя синтаксис ALTER TABLE, но я полагаю, что есть причины для ваших проектных решений (вероятно, основанных на производительности).

person Dan Hardiker    schedule 08.01.2012