эффективные операции с БД - PullRequest
0 голосов
/ 26 января 2011

Вот сценарий, для которого я ищу решение на работе. У нас в postgres есть таблица, в которой хранятся события, происходящие в сети. В настоящее время работает так: строки вставляются по мере наступления сетевых событий, и в то же время удаляются более старые записи, которые соответствуют определенной отметке времени, чтобы размер таблицы был ограничен примерно 10 000 записей. В принципе, идея похожа на ротацию бревен. Сетевые события происходят тысячами раз за разом, следовательно, скорость транзакций слишком высока, что приводит к снижению производительности, после того, как когда-нибудь сервер либо просто падает, либо становится очень медленным, кроме того, клиент просит сохранить размер таблицы до миллиона записей что ускорит снижение производительности (так как мы должны продолжать удалять записи, соответствующие определенной временной метке) и вызвать проблему с управлением пространством. Мы используем простой JDBC для чтения / записи в таблице. Может ли техническое сообщество предложить более эффективный способ обработки вставок и удалений в этой таблице?

Ответы [ 2 ]

4 голосов
/ 26 января 2011

Я думаю, что я бы использовал многораздельные таблицы, возможно, в 10 раз больше желаемого размера, вставляя в самый новый и удаляя самый старый раздел.Самый старый "намного меньше, чем запрос и удаление.

Обновление: я согласен с комментарием nos, хотя вставки / удаления могут не быть вашим узким местом.Может быть сначала какое-то расследование.

0 голосов
/ 26 января 2011

Некоторые вещи, которые вы можете попробовать -

  • Пишите в лог, есть отдельный пакетный процесс. написать в таблицу.
  • Сохраняйте записи как есть, делайте удаление периодически или в периоды меньшего трафика.
  • Выполнить запись в буфер / кэш, чтобы фактические записи в БД происходили из буфера.

Несколько общих предложений -

  • Поскольку вы удаляете на основе метки времени, убедитесь, что метка времени проиндексирована. Вы также можете сделать это с помощью счетчика / с автоматическим приращением rowId (например, удалить, где id
  • Кроме того, пакетная запись JDBC на намного быстрее, чем запись отдельных строк (ускорение на порядок, легко). Пакетная запись по 100 строк за раз очень поможет, если вы можете буферизовать записи.
...