Pull to refresh

Comments 6

Коллеги, предлагаю «засунуть хранилища данных в Kubernetes». В смысле, анекдот расскажите кто-нибудь. Заинтриговало. :)

Анекдот неприличный, вряд ли я могу цитировать его на хабре. Предлагаю в яндексе набрать "мужик сено скафандр" :)

А… Времена изменились, по этому комсомольца в противогазе пришлось заменить на более современного персонажа…
Нет никаких ACID транзакций
В Redis есть ACID транзакции. Если сомневаетесь, перечитайте определение ACID.
даже при включённом сохранении на диск данные могут быть потеряны частично либо полностью
Как и для SQL баз данных.
в данных может быть нарушена целостность с точки зрения приложения
Как и для SQL баз данных.
фоновое сохранение данных на диск может нанести ущерб производительности и отказоустойчивости
Как и для SQL баз данных.
Данные имеют time to life. возражение: это не мешает хранить их в SQL СУБД
С такой аргументацией, это не мешает их хранить даже в уме. Redis очень эффективен для хранения time to life данных.
При записи сохранять данные и в Redis, и в основную БД
А о консистентности между двумя БД вы подумали?
избегайте хранения в Redis важных данные или данных, требующих контроля целостности
Что конкретно вам мешает обеспечить высокую надежность хранения данных и обеспечение целостности в Redis?
возражение: перегруженный redis работает медленее
Вот только уровень перегрузки у Redis обычно на один-два порядка выше чем у SQL БД.

В целом Redis проектировался с приоритетом Availability over Consistency, но это отнюдь не значит что Consistency в Redis не достигается, как вы утверждаете в статье.

Насчёт ACID транзакций вы правы, я ошибся на этот счёт. Хотя, конечно, поведение транзакций несколько отличается от SQL и не позволяет получить данные, принять решение, записать данные - такое, насколько мне известно, достижимо только через Redis Script.

Что касается "как и SQL": да, настройками Redis можно достичь тех же гарантий, что у MySQL, но это полностью уберёт преимущества в производительности, при этом Redis останется однопоточным, а MySQL - многопоточным.

Ну и кроме того, если мы превращаем Redis в однопоточный и ограниченный по функциональности аналог MySQL, то в чём смысл такой инсталяции Redis?

Если же не превращаем, то сказанное в статье верно.

И в любом случае, Redis в дополнение к основной БД - это новая точка отказа. Посыл статьи вовсе не в том, что Redis не надо использовать. Посыл в том, что использование должно быть оправдано, а реализация должна быть адекватной, если проекту важна отказоустойчивость.

Хотя, конечно, поведение транзакций несколько отличается от SQL и не позволяет получить данные, принять решение, записать данные — такое, насколько мне известно, достижимо только через Redis Script.
Нет, позволяет.
Что касается «как и SQL»: да, настройками Redis можно достичь тех же гарантий, что у MySQL, но это полностью уберёт преимущества в производительности, при этом Redis останется однопоточным, а MySQL — многопоточным.
Из аббревиатуры ACID четыре буквы из пяти Redis обеспечивает «по-умолчанию» и без каких-либо компромиссов с производительностью не хуже чем MySQL. Более того, Redis производительный именно потому, что он принципиально однопоточный.
Ну и кроме того, если мы превращаем Redis в однопоточный и ограниченный по функциональности аналог MySQL, то в чём смысл такой инсталяции Redis?
Даже с записью AOF файла для достижения Durability, Redis выдает 100-200 тысяч операций в секунду.

Поможет ли вам достигнуть аналогичных результатов многопоточность MySQL?

Redis не стоит пытаться превратить в MySQL ровно по той же причине, по которой не нужно пытаться превратить MySQL в Redis – они по разному спроектированы и для разных целей. В некоторых ситуациях использование Redis позволяет создать более отказоустойчивое решение, чем использование MySQL, особенно в условиях ограниченных ресурсов на инфраструктуру, и особенно если под отказоустойчивостью понимать высокую доступность.
Only those users with full accounts are able to leave comments. Log in, please.