Ответы пользователя по тегу Big data
  • Какое подобрать хранилище 3 триллионов событий?

    @lega
    Скорость ssd до 550Mb/sec, если события по 20б, то можете по файликам разливать ~27 млн событий в сек (одного канала не хватит чтобы нагрузить)

    Выборка событий будет происходить с использованием фильтров по полям в среднем раз в секунду.
    Разливайте в "доль" фильтров и будет норм.
    Ответ написан
    4 комментария
  • Какую выбрать БД для больших объемов?

    @lega
    Складывайте в файлы по часам (например) - новый час - новый файл. Далее пакуйте.
    На timestamp можно отвести 2 байта (т.к. в пределах часа). Посмотрите может value можно уменьшить.
    Даже если на запись 16 байт, то современный HDD (150Mb/s) сможет сохранять ~9млн записей в сек (с вашими 30к справится)
    Останется только сделать тулзу которая будет по вашим условиям доставать данные.

    Файлы можно хранить на диске, можно в файловой БД, можно в GridFS которая будет шардить их по кластеру.
    Ответ написан
    3 комментария
  • MongoDB (сравнение массивов, агрегация, большие количество данных)?

    @lega
    1 - встречалось в поле properties 350 раз
    2 - встречалось в поле properties 100 раз

    Для этого можно держать кеш: {_id: 1, count: 350}

    db.collect.find({"properties": {$all:[1]}})
    Когда элемент один, лучше так:
    db.collect.find({"properties": 1})
    Ответ написан
  • Как устроить быстрое чтение рандомных участков в файле в 400 гб?

    @lega
    Но для seek он каждый раз делает его не от текущего места а от начала файла

    seek просто задает адрес и не делает io операций, поэтому это не влияет.

    Скорее всего SSD тормозной, можете проверить его тулзами. Так же когда вы считываете всего 100 байт, с самого девайса считывается минимальный блок (4кб, 16кб, ...)
    Ответ написан
    2 комментария
  • Как организовать в Linux с 10 000 000 000 (миллиардами) inodes, быстрый доступ к ним и их обработку (Линукс замена бд)?

    @lega
    Классическая фс для этого не подходит, если у вас размер данных на "хеш" небольшой, например до 100 байт, то просто сделайте большой файл на 400гб и пишите данные по индексу, при этом хеш не нужен. С нормальным ssd можно будет писать до 1М записей в сек. обычным скриптом. При этом 75% места будут "простаивать". Если хотите сэкономить места, тогда нужно использовать индекс, например заюзать leveldb или т.п.
    Ответ написан
    9 комментариев
  • Создание таблиц по месяцам, MySQL - какой способ выбрать?

    @lega
    Единственный минус, что если сессия открыта в конце прошлого месяца, а закрыть ее нужно в текущем, как быть? Ломаю голову...
    Вариантов много, зависит от того как вы будете использовать данные.
    Например если сессия закрывается, то переносить её с прошлого месяца в текущий (в ид сессии зашит месяц старта).

    Ещё можно хранить события (а не период), тогда можно данные "резать" хоть по дням/по часам, например так:
    session_id, event, datetime
    12345, 'start_session', 2015-09-15
    12345, 'finish_session', 2015-10-15
    Ответ написан
    Комментировать
  • Где найти большие структурированные данные?

    @lega
    Ответ написан
    Комментировать
  • Как реализовать пересечение двух множеств (много данных)?

    @lega
    Можно попробовать sphinxsearch (или эластик), он ищет с сортировкой по релевантности, т.е. сверху будут наибольшие пересечения ключей, но он может сильно задуматься если там много пересечений.
    Либо попробовать сделать обратный индекс с сортировпнными сайтами, за один проход вычислять пересечение по сайту, все сайты раскидать по нодам, результат скидывать в БД для сортировки.

    Сколько в среднем ключей у сайта?
    Ответ написан
    7 комментариев
  • Как аггрегировать данные с нескольких постгрессов?

    @lega
    В вашем случае наверно самым оптимальным будет параллельное вычерпывание сортированных данных (по одному проходу по каждому серверу и одной записи на каждую строку), если % пересечений высок.

    А вообще почему не сделать шардинг?, сделать индекс (например) по 3-м полям и заливать данные в нужные сервера (типа всех alex на 1 сервер, max на 2-ой), что-б не было пересечений, таким образом данные мержить не нужно будет + экономия памяти.
    Так же непонятно наличие мастер базы, вполне возможно её можно было избежать.
    Ответ написан
    Комментировать
  • Оптимальный способ хранения небольших растровых изображений. Объем > 400 Gb. БД или FS?

    @lega
    Можно взять MongoDB, плюсы такие:
    * При большой нагрузке или объеме можно будет данные разлить по шардингу. Это так же может помочь сэкономить, например можно вместо одного сервера DO за $480 можно взять 24 минимальных виртуалки за $120, + будет больше ядер и трафика.
    * Можно хранить доп. параметры, теги, (атрибутивную информацию) и прочее вместе с файлом, таким образом тайл и все с ним связанное будет в одном блоке данных, в отличие от применения *sql. Это хорошо для производительности, т.к. меньше индексов и меньше обращений к ФС.
    * Можно сделать доп. индексы
    * Можно использовать гео-индексы, выборка тайлов по радиусу и т.п.
    * Так же для данной задачи (вполне возможно) достаточно атомарных комитов, они лучше по производительности чем полноценные транзакции.
    Ответ написан
    3 комментария
  • Как хранить и быстро обрабатывать большое количество (> 10-100M) статистики рекламной системы?

    @lega
    Я делал примерно так:
    Каждый час я формировал чанки с несколькими разрезами, в вашем случае можно взять например "дата время" и "номер рекламного места" (зависит от запросов), в итоге 1 "колонка" "исчезнет", вместо даты можно хранить diff от начала часа.
    Чанки максимально сжимались и разливались по шардингу.
    В результате хранимый объем был в 5-10 раз меньше исходного.

    Формирование отчета: Сервис на питоне, из БД за период доставались чанки, распаковывались передавались в расширение на C который обсчитывал и возвращал результат.
    По скорости выходило примерно 250 млн "событий" доставались и обсчитывались за 2-4 сек на одном ядре виртуалки от DO.

    Каждый час (период времени) для каждого отчета формировались результаты/кешы во всех разрезах - это позволило выдавать результаты клиентам моментально. Весили они мало если сравнивать с весом исходных данных.

    Т.е. каждый час формировались свежие данные, но кроме этого ещё были реал-тайм отчеты - копия входного потока уходила на этот сервер который "считал цифры" и обнулял их каждый час.
    Ответ написан
    Комментировать
  • Как организовать быстрый поиск по 3 млрд документов?

    @lega
    Грубо говоря, это список ключевых запросов пользователей ПС, из которых нужно выбрать те, в которые входит, например, слово "скачать".
    Если список ключевых слов не большой то можно сделать индексированный массив в документах и туда помещать эти ключевые слова (или их идентификаторы).
    В противном случае использовать sphinx/elasticsearch. Можно так же использовать text index из mongoDB, но он мне показался через чур прожорливым.

    попробовал сделать выборку через Matches
    При этом происходит перебор и проверка всех документов, поэтому это так долго.
    Ответ написан
    Комментировать