Используйте redis для кэширования журнала: возможно ли создать политику выселения, которая выселяет в PostgreSQL? - PullRequest
0 голосов
/ 05 июля 2018

У меня есть недавно написанная система (написанная на C ++), где я ожидаю, что будет выполнено много журналирования, по крайней мере, в начале, пока система не окажется надежной. Я планирую хранить сообщения базы данных на сервере PostgreSQL, но для эффективности я хотел бы сначала кешировать в Redis, где я пишу в Redis, а затем, если сообщения превышают некоторый размер, я сбрасываю их в постоянную базу данных где они могут быть перемещены позже.

I читайте о кэшировании LRU о redis, и это кажется подходящим, однако кажется, что кэширование LRU больше ориентировано на чтение данных, а не на запись. Другими словами, описанный там сценарий звучит так, будто я хочу что-то прочитать из постоянной базы данных, и чтобы избежать многократного чтения (доступа) к этой постоянной базе данных, я беру это значение и записываю его в кэш redis и использую его повторно , Но я бы хотел сделать наоборот. Моя система регистрации будет записывать сообщения журнала в Redis, а затем я бы хотел, чтобы они были «выселены» в PostgreSQL в предопределенной схеме.

Можно ли мне написать плагин Redis, который сделает это возможным? Кажется, я не могу найти литературу или примеры по этому поводу.

PS: Пожалуйста, не стесняйтесь предложить лучший механизм для кэширования журнала.

1 Ответ

0 голосов
/ 05 июля 2018
  1. Если вы хотите write efficiency, я предлагаю leveldb или rocksdb, оба имеют Log-Structured-Merge-Database (LSM) дизайн, который имеет отличную производительность записи и хорошую производительность чтения.

    Google Leveldb

    Facebook Rocksdb

  2. Если вы хотите использовать redis и postgres, я думаю, вы можете использовать Redis как job-queue。 Запишите свой log-message в очередь и настройте некоторые worker для получения log-message из очереди и записи в postgres.

    В этом случае вы можете рассмотреть: Сельдерей

    Или внедрите job-queue самостоятельно с помощью redis List: используйте LPUSH для хранения log-message и LPOP для получения log-message, а затем запишите их в postgres.

...