@Ajshma, Спасибо. Именно так я все и планирую. Вижу, что кодировка плохая. Хотелось бы ее сделать норм (чтоб не было опасений, что что-то сохранится не так и данные потеряются; хотя допускаю, что опасения не уместны)
база данных и много документов
-
может кто подскажет лучший способ хранения и обработки большого количества записей в базе данных?
есть быстро растущая база данных и следующие паттерны ее использования:-
проверить есть ли запись в базе, если нет - добавить запись. и допустим за раз нужно проверить и потенциально добавить 10 000 записей(документов)
если сделать в лоб: для каждого проверяемого значения получить запись с фильтром по этому значению и если колличество записей меньше одной - добавить запись. До тех пор пока записей в базе несколько тысяч все терпимо, дальше ...
какое-никакое решение: вначале собрать все Новые Данные(быстро, не критично), отчистить от дублей(быстро, все что будет дальше сделает еще быстрее), после получить из базы страницу в миллион Записей, или несколько раз меньшее Записей(медленно, но что делать), получить из Записей только нужное Поле и чтобы сделать все совсем плоско склеить их в Строку(быстро), проверить есть ли каждые Новые Данные в Строке(быстро), и если нет добавить Запись c Новыми Данными(не хватает insertMany, но в любом случае добавление новой записи довольно быстро)
решение? решение. -
получить из базы каждую запись, совершить, по итогам изменить запись. мы помним что в базе под миллион записей и чтобы было быстрее пусть потоков будет 200
если получать из базы страницы по 1 записи от 1 до миллиона поплохеет.
уменьшим количество обращений к базе в 1000(или 10000) раз - получать из базы страницы по 1000 записи от 1 до тысячи
но потом то все равно придется изменить миллион записей по одной за раз(updateMany вероятно помог бы и тут, но нет же)
любые ваши идеи?
ничего не знаю про носкюл, а кто из них индекс? можно индексом сделать нужное поле?
-
-
@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] драйверы.
Подробная документация.
