@orlov1 Try action "trim" in module "string" for each extracted string and after that combine them with action "create csv string" from same module with space string as separater (" ")
image.png
ff9cc7ae-769f-463d-b733-70c933aa5257-image.png
может кто подскажет лучший способ хранения и обработки большого количества записей в базе данных?
есть быстро растущая база данных и следующие паттерны ее использования:
проверить есть ли запись в базе, если нет - добавить запись. и допустим за раз нужно проверить и потенциально добавить 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] драйверы.
Подробная документация.