Есть заказы, которые активны в течении 30 минут до 4 часов.
В базе на сегодня уже 500 000 заказов.
К серверу напрямую обращается 1000 запросов в минуту
В основном запрос это, есть для меня новые заказы ?
В онлайне всегда находится примерно 300-500 заказов
Использую Laravel
Сейчас все запросы идут напрямую в Mysql, но по сути зачем базу грузить такими частыми запросами? Вот хочу использовать для этого Redis.
В общем он отлично справляется с таким потоком, но я в основном пользуюсь им как ключ=> Значение.
В Redis еще есть другие типы данных, вот собственно хотелось узнать, как можно делать некий список из 300 строчек с уникальными ключами.
т.е даже если взять элементарно, можно было бы просто в один ключ orders Загонять массив всех активных заказов и все прекрасно, но встает вопрос, чтобы удалить 1 заказ из массива, надо весь его перебрать и записать обратно новый массив без этого заказа. Так же и с добавлением.
Возможно ли просто добавлять в массив 1 командой и удалять так же по ключу, плюс получать весь список при необходимости целиком. Так же будет плюсом, выборкой по критериями
А вот у нас недавно редис взял и похерил добрую половину ключей. Просто взял ночью и похерил. Рандомно разные ключи. У нас такое впервые за 5 лет работы. Бэкап - да, есть, но это уже потеря консистентности. После этого случая я зарубил себе на носу, что храню там только те данные, которые допустимо потерять или можно восстановить без особых потерь
Авторы Tarantool утверждают, что гарантируют.
Как бы аналог Redis, но с сохранением на диск https://habr.com/post/133435/ https://habr.com/company/mailru/blog/279999/
На диск пишутся чисто изменения простеший поток (WAL) - очень быстро, но этого достаточно для восстановления данных на любой момент.
To build and install the tarantool-php driver from source, you need:
PHP version 5 (no less than 5.3.0, but strictly under 6.0.0);
php5-dev package (the package should contain a utility named phpize);
php-pear package.
Вот и кончилась магия tarantool, а php ниже 7 версии в наше время не актуально
Cabac_B, я гуглил и нашел только для 7.1 версию и то она в бета тестировании, нет никакой стабильной. Просто если Вы предложили tarantool, то нужно чтобы он работал с актуальной версией php, а то что костылями можно подключиться к tarantool, это уже совсем другой разговор. Официальной поддержки в tarantool нет для Php7
Денис,
Автор этой статьи должен быть в курсе, что именно можно использовать https://habr.com/post/113298/
если не ошибаюсь, то он и поддерживает PHP-коннектор.
Cabac_B, я повторюсь выше, я гуглил про него и в итоге tarantool поддерживает официально php 5 Только, тот автор как раз и писал эту библиотеку под Php 5 и больше не продолжает. На этом проекте его поддержка прекратилась и смысла использовать tarantool нету, так как никакой поддержки. Пост автора от 2013 года, тогда был актуален php 5
Денис, не нужно ничего фантазировать - а просто спросить у него.
всяко-разно он больше в курсе этой темы чем вы или я.
я гуглил и нашел только для 7.1 версию и то она в бета тестировании, нет никакой стабильной
то, что авторы называют бетой - не показатель.
protobuf, к примеру, - альфа версией был 3 года, при этом по всему миру (в том числе и в серьезных организациях как Google) использовался в production.
В Redis существуют команды HSET/HGET/HDEL.
Они прекрасно подойдут для этой задачи.
Есть возможность "добавлять в массив 1 командой и удалять так же по ключу, плюс получать весь список при необходимости целиком".
Если построить покрывающие индексы в MySQL, будет работать примерно так же как редис по скорости, а надёжность будет выше.
И зачем вы храните старые, если они больше не используются?
Выгружайте в архив и идеи с редисом отпадут )
Архив можно организовать в виде отдельной базы
Но вообще у нас есть таблицы по 5 миллионов записей, в которых используется только текущий день.
На работе это никак не сказывается.
Проблемы бывают при изменении схемы. В недавнем базу пришлось остановиться на 3 часа ради добавления одного поля.