Pytables - удалить строки из таблицы по некоторым критериям

У меня есть одна таблица со столбцом Time32 и большим количеством строк. Моя проблема следующая.

Когда моя таблица достигает тысячи миллионов строк, я хочу начать архивировать каждую строку старше указанного значения. Для создания запроса я буду использовать столбец Time32, который представляет временную метку для собранных данных в строке. Итак, используя этот запрос, я хочу удалить старые строки в рабочей таблице и сохранить в другой таблице, зарезервированной для хранения архивных записей. Является ли это возможным? Если да, то какой самый эффективный способ?

Я знаю метод whereAppend(), но этот метод только копирует записи, а не удаляет их из фактической таблицы. Спасибо за совет. Ваше здоровье!


person Nikola Stevanovic    schedule 08.05.2012    source источник


Ответы (1)


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

Тем не менее, в зависимости от вашего ядра базы данных и возможностей языка, построенного на его основе, вы можете написать атомарные команды запросов, которые выполняют для вас атомарное «копирование, а затем удаление», но это зависит от возможностей вашего ядра базы данных.

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

person Zeugma    schedule 08.05.2012
comment
На самом деле, со временем я просто добавляю новые строки и могу использовать этот факт в процессе архивирования. Если возможно каким-то образом вернуть индекс строки для самой последней даты до порога метки времени, я могу вызвать метод removeRows(0,result_index) и удалить все старые записи. Но как я могу найти индекс этой строки? Какой-то совет? - person Nikola Stevanovic; 08.05.2012