Мы пишем приложение чата, частично в node.js. Мы ожидаем 1000 вложений (сообщений) в секунду, поэтому наш подход заключался в том, чтобы писать redis (используя lrange для каждой комнаты), а также иметь список в redis, называемый not_saved_messages, который выполняет другой процесс и записывает в MySQL , Это анти-шаблон? Должны ли мы просто писать в MySQL и надеяться, что это задержит?Использование redis в качестве посредника перед вставкой MySQL
ответ
Я не думаю, что это обязательно антипаттерн, если это хорошо сделано. Черт, конечно, в деталях.
Что вы пытаетесь сделать, это использовать mysql для ведения журналов и redis для живой информации, не так ли? Мне кажется, что это может сработать. Вопрос заключается в том, как сделать трубопровод цельной функцией.
BTW, большое количество пользователей данных используют что-то очень близкое к этому результату. Например, CERN использует ряд решений NoSQL во время обработки данных, прежде чем данные перейдут в rdbms (Oracle, PostgreSQL или MySQL). Но это определенно продвинутая территория дизайна.
Я думаю, вы можете сказать, что это больше, чем просто регистрация, так как некоторые из более сложных функций приложения будут обрабатываться в MySQL. Вполне возможно, что Redis может справиться со всем этим, но есть дискомфорт в использовании Redis для хранения всех данных. Кроме того, часть, охваченная Redis, является небольшим подмножеством большего приложения. Я надеюсь, что в этом есть смысл. – StackOverflowed
Вместо того, чтобы вставлять данные непосредственно, вы можете сначала его сохранить в Redis. Затем второй процесс может взять его из Redis и вставить в базу данных , одну «часть данных» за раз. Недостатком здесь является то, что у вас понадобится достаточно памяти для Redis.
// PHP program code
//...
// assuming $r is already connected Redis() instance.
$r->sadd("data_pipe", serialize($data));
Затем
// Open connection to the database
open_data_connection();
$r = new Redis();
$r->connect("127.0.0.1", "6379");
while(true){
while($xdata = $r->spop("data_pipe")){
$data = unserialize($xdata);
// store the data
store_data($data);
}
// No more data
sleep(30);
}
Если база данных не может угнаться, например, вставляйте данные так же быстро, как появляются новые данные , вы всегда можете начать процесс получения дважды или более, или сделать какой-то осколок, импортируя данные в 2-3 базы данных.
- 1. Перед вставкой triggert в mysql
- 2. Использование компьютера в качестве посредника связи USB
- 3. MySQL и триггер перед вставкой
- 4. Обновление массива перед вставкой MySQL?
- 5. Создайте Mysql Trigger перед вставкой
- 6. MySQL Trigger - INET_ATON Перед вставкой
- 7. Использование sub запроса в mysql перед вставкой trrigger
- 8. Как мне в PHP избежать строки перед вставкой в Redis?
- 9. удалять строку динамически перед вставкой в mysql
- 10. Проверка данных перед вставкой в MySQL DB
- 11. Добавление значений Перед вставкой в mysql
- 12. mysql запросы перед вставкой операции syslog-ng
- 13. Как исправить синтаксис триггера MySQL «ПЕРЕД ВСТАВКОЙ»?
- 14. Помощь при запуске Mysql - перед вставкой
- 15. объединить два перед вставкой на триггеры mysql
- 16. MySQL 2 Таблицы, запрос перед вставкой
- 17. foreach делать операцию перед вставкой mysql
- 18. Python проверка MySQL дубликатов перед вставкой
- 19. MySQL Trigger - обновлять данные перед вставкой
- 20. Использование redis в качестве кеша для базы данных mysql
- 21. Посредника шаблон проектирования в качестве тестовой системы
- 22. Изменение типа MySQL при запуске перед вставкой
- 23. MySql Триггер перед вставкой не работает
- 24. Проверка диапазона дат MySQL перед вставкой в MySQL
- 25. Использование Redis в качестве провайдера состояния сеанса
- 26. Триггер перед вставкой
- 27. DataBind() перед вставкой данных?
- 28. SQL перед вставкой триггера
- 29. SQL Перед вставкой
- 30. создать триггер перед вставкой
Не похож, как анти-паттерн и практический способ борьбы с очередями вставок. Вы в основном используете Redis в качестве очереди сообщений. Вероятно, я хочу следить за задержкой, поскольку в зависимости от того, какие части вашего приложения используются из хранилища MySQL, латентность может повлиять на опыт пользователя или ожидания. Похоже, что это разумный подход. –