Форум сайта python.su
В один момент времени (datetime 8 bytes) с мак-адреса клиента (6 bytes) на мак-адрес точки (6 bytes) поступает сообщение в 1 byte.
Итого размер одного события 8+6+6+1 = 21 byte
У каждой точки есть ряд тегов, не более 10 (всего тегов не более 64к), у точки теги могут меняться, и это должно влиять на старые данные.
Основные запросы: получить все события с дата+время_1 до дата+время_2 с фильтром по определенному тегу или мак-адресу точки, иногда нужна сортировка по времени. Период запрашиваемых данных не выходит за последние 60 дней (хотя поговаривают о 2-х годах)
Кол-во точек не более 100к, кол-во клиентов не ограничено, на каждую точку в день приходит в среднем 70к событий.
Ну и как обычно нужна экономия ресурсов :)
Какую бы вы базу взяли, как хранили бы и какие индексы?
Офлайн
o7412369815963Тогда надо вообще без индексов :).
Ну и как обычно нужна экономия ресурсов :)
Отредактировано doza_and (Авг. 2, 2014 15:27:34)
Офлайн
doza_andБез индексов будет cpu и io тратится
Тогда надо вообще без индексов :).
Офлайн
o7412369815963В том что я изложил индексы вообще есть - они используются когда ищутся объекты в hdf5 директории с данными и последовательности по точке.
Без индексов будет cpu и io тратится
Отредактировано doza_and (Авг. 2, 2014 22:53:31)
Офлайн
doza_andДа, они везде есть где много данных.
В том что я изложил индексы вообще есть
doza_andСогласен, сейчас на это тратится примерно 0.3%, в принципе не так существенно (плата за удобство, хотя в любой момент можно будет подменить базу), а вот компрессию можно поменять.
поскольку информация о типах вынесена отдельно в заголовок таблицы.
Офлайн
Пошел новый этап проекта, появились новые хотелки, и появилась необходимость получать данные с фильтром по клиенту.
Из нескольких придуманных вариантов пока остановился на таком:
Сделать новую коллекцию: мак-клиента, время пакета (точнее час), массив ссылок на запаковынные данные (с 1 поста). Т.е. один такой документ будет ссылаться на несколько “пакетов” в конкретном часе, где был замечен мак-клиента.
Таким образом нет дублирования/раздувания данных, есть индекс мак-клиента + время, что позволяет быстро найти данные и сделать шардинг, хотя для этой коллекции шардинг не обязателен, коллекция не должна быть большой.
Кстати появилась идея - таким же образом можно сделать задачу из 1 поста, - оторвать запакованные данные и индексированные данные, причем индексированные можно будет перенести в psql, и можно будет делать хитрые индексы которые не возможны при шардинге, например хранить список тегов в каждой записи, что-б не фильтровать по списку точек, а фильтровать по самому тегу.
:)
Офлайн
o7412369815963Рано я сделал вывод, при том что клиентов не ограничено…
коллекция не должна быть большой.
Отредактировано o7412369815963 (Сен. 4, 2014 09:02:38)
Офлайн
o7412369815963По клиентам можно рассчитывать на 2 лимита: 10М (и 100М).
при том что клиентов не ограничено…
Отредактировано o7412369815963 (Сен. 4, 2014 09:37:47)
Офлайн
Ещё такой вариант рассматриваем: такой же подход как для задачи из поста 1, но в разрезе мак-ов клентов, т.к. клиентов много, увеличиваем период до месяца или года.
Т.е. есть будет дубль данных но в профиль, зато можно будет быстро получить данные, ну и будет как резервная копия.
Офлайн