база данных и много документов



  • может кто подскажет лучший способ хранения и обработки большого количества записей в базе данных?
    есть быстро растущая база данных и следующие паттерны ее использования:

    1. проверить есть ли запись в базе, если нет - добавить запись. и допустим за раз нужно проверить и потенциально добавить 10 000 записей(документов)
      если сделать в лоб: для каждого проверяемого значения получить запись с фильтром по этому значению и если колличество записей меньше одной - добавить запись. До тех пор пока записей в базе несколько тысяч все терпимо, дальше ...
      какое-никакое решение: вначале собрать все Новые Данные(быстро, не критично), отчистить от дублей(быстро, все что будет дальше сделает еще быстрее), после получить из базы страницу в миллион Записей, или несколько раз меньшее Записей(медленно, но что делать), получить из Записей только нужное Поле и чтобы сделать все совсем плоско склеить их в Строку(быстро), проверить есть ли каждые Новые Данные в Строке(быстро), и если нет добавить Запись c Новыми Данными(не хватает insertMany, но в любом случае добавление новой записи довольно быстро)
      решение? решение.

    2. получить из базы каждую запись, совершить, по итогам изменить запись. мы помним что в базе под миллион записей и чтобы было быстрее пусть потоков будет 200
      если получать из базы страницы по 1 записи от 1 до миллиона поплохеет.
      уменьшим количество обращений к базе в 1000(или 10000) раз - получать из базы страницы по 1000 записи от 1 до тысячи
      но потом то все равно придется изменить миллион записей по одной за раз(updateMany вероятно помог бы и тут, но нет же)

    любые ваши идеи?

    ничего не знаю про носкюл, а кто из них индекс? можно индексом сделать нужное поле?



  • @ruzne в сторону Clickhouse не смотрел?



  • @romanbiz said in база данных и много документов:

    @ruzne в сторону Clickhouse не смотрел?

    в первый раз слышу об этой...

    понятно что множественная вставка есть во многих или всех реляционных субд, но и в noSQL она тоже есть и вроде как и в монгоБД есть множественный insert и множественный update вроде.
    про монго, хранить он вроде большое количество документов без проблем и я кое что изменил и оптимизировал, кроме того что описано выше я например добавил признак по которому некоторые записи проверяются в каждом проходе а значительно реже и готов что-то еще менять.
    то есть например получение большого количество документов из очень большой таблицы с большим количеством фильтров выполняется с приемлемой скоростью, а вот большое количество запросов на чтение а так же на изменение данных приводят к висим.
    если использовать сторонний субд то я скорее всего выберу чтото знакомое. А что особенного в КликХаузе?
    я так понимаю в ноде есть инструмент для монгоДБ. Там то хоть можно мультивставку?
    upd. думаю моя проблема решена, все таки хуже всего это операция чтения из базы сфильтром, вероятно, мне так кажется..



  • @ruzne Из вики. Основные характеристики базы данных ClickHouse[11]:

    Действительно колоночная СУБД. Рядом с данными не хранятся другие величины, например, в ClickHouse поддерживаются значения постоянной длины, чтобы не хранить рядом размер типа.
    Линейная масштабируемость. Система позволяет увеличивать кластер добавлением серверов.
    Отказоустойчивость. Система представляет собой кластер шардов, где каждый шард — это группа реплик. Используется асинхронная multimaster репликация: после записи на любую доступную реплику, данные распространяются на все остальные реплики. Для координации работы реплик используется ZooKeeper (ZooKeeper не участвует в процессе обработки и выполнения запроса).
    Способность работать с большими данными (триллионы записей и петабайты данных).
    Поддержка SQL. ClickHouse поддерживает диалект SQL c расширениями: массивы и вложенные структуры данных, вероятностные структуры, функция по работе с URI, возможность подключить внешнее key-value хранилище и т. д.
    Высокая эффективность работы[12].
    векторные вычисления;
    данные не только хранятся по колонкам, но и обрабатываются по векторам (кусочкам колонок), за счёт чего достигается высокая эффективность по CPU;
    наличие функциональности для семплирования и приблизительных вычислений;
    параллельная и распределенная обработка запросов (в том числе JOIN'ов).
    Сжатие данных.
    СУБД оптимизирована для работы на HDD-дисках. Можно обрабатывать данные, которые не помещаются в оперативную память.
    Разнообразные клиенты для подключения к БД. Для работы с базой данных можно использовать консольный клиент, HTTP API и ряд wrapper’ов на Python, PHP[13], NodeJS[14], Perl[15], Ruby[16] и R[17]. Также для ClickHouse есть JDBC[18] и Golang[19] драйверы.
    Подробная документация.


Log in to reply
 

  • 2
  • 4
  • 5
  • 3
  • 3
  • 2
  • 2
  • 2