Отслеживание вступивших и вышедших пользователей. Какую базу данных выбрать?
Допустим есть группа с пользователями, у каждого пользователя есть id. Допустим в группе 10 миллионов пользователей. и таких групп может быть тысячи. Каждый день кто-то вступает в группы, а кто-то выходит. Раз в день для каждой группы собирается полный список id участников. Надо сравнить этот список со списком за предыдущий день, чтобы определить кто ушел и кто пришел. Какую базу данных лучше выбрать под эту задачу?
Возможен еще такой сценарий: до начала обновления создаем переменную с unix timestamp. Если пользователь уже есть в базе, то в поле updated_at ставим значение timestamp. Если пользователя нет в базе, то добавляем его и в поле updated_at и created_at ставим timestamp. Потом по полю updated_at определяем тех, кто ушел, а по полю created_at определяем тех, кто пришел. Если такой сценарий, то какая база лучше всего справится? Тут подразумевается много write и относительно мало read.
О, очередной отслеживатель вступил/вышел) Кайф.
И логика неправильная вообще. Не нужно в бд ничего писать постоянно.
Redis используй, а мастер в SQL обновляй раз в сутки.
у вас всего десятки миллионов идентификаторов и в памяти их хранить нет желания на столько что готовы насиловать диск базой данных?
смутно помню еще до std:: времен с красивыми реализациями всевозможных контейнеров писал простенький класс для хранения по хешам массивов соответствующих им идентификаторам (буквально массив на все возможные значения хеша от идентификатора - элементы ссылки на массивы с размером и списком идентификаторов, потребление памяти где то 2х+log(x) dword (4байт) в вашем случае это порядка 100мегабайт, 64битные идентификаторы потребуют на 40мб больше!
это много?
тупая реализация давала бы медленное добавление, при выборе плохой хеш функции (список копировать в новое место) а быстрая потребляла бы примерно в 2 раза больше памяти, но все еще в пределах нормы
а сейчас std:set реализаций как грязи, под любые языки
rPman, вероятно вы правы. Насколько я понимаю, вы тоже за использование redis? У меня мало опыта работы с ним, его легко будет масшатабировать если количество групп допустим станет больше тысячи и суммарное количество id где-то 500 миллионов?
Bone, c++
редис это универсальная база данных, накладные расходы на хранение данных в которой из-за универсальности огромны
свое же решение, в несколько десятков строк будет менее универсально, может быть даже не оптимально в каких то случаях, которых у тебя мало, но определенно может быть эффективнее по ресурсам
у вас действительно может быть пол миллиарда записей?
выделить под задачу несколько гигабайт оперативной памяти не сложно, а уж если эта задача выполняется раз в сутки и подавно легко, благодаря облачным решениям любую машину на час можно арендовать