powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какую БД выбрать?
25 сообщений из 76, страница 1 из 4
Какую БД выбрать?
    #39643766
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 50 ГБ текстовой информации (csv- формат). Для ускорения обращения я перегнал ее в двоичные файлы (выполнив преобразования из текста в нужные типы данных), получив 33 ГБ. В итоге скорость чтения увеличилась в 50/33 раз, т.е. узким местом является не необходимость напрягать процессор для конвертации из текста, а только работа с жестким диском.

В двоичном формате данные хранят все поля (в структурах), и читаются также все поля. Поэтому появилось мысль использовать БД, чтобы не читать лишние поля (а преобразования из выборки БД в нужные объекты скорее всего как и в предыдущем случае практически не будет замедлять работу).

Какую БД посоветуете при подобном объеме? Подойдут ли для этого dbf- файлы (или они тоже читаются целиком)? Пока критерий один- максимальная скорость.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643769
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочется добавить, что БД будет работать на том же компьютере, где выполняется обработка этих данных. Другими словами, желательна маленькая нагрузка на процессор.

+ Хочется простое решение с наличием простой документации

Есть что- то подобное?
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643771
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643775
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov базы данных с поколоночным хранением
?

Спасибо! Я всегда думал, что раз SQL- запросы позволяют указать конкретные поля для выборки, то и чтение происходит только этих полей. Какого же было мое удивление, когда я прочитал это:
авторОднако что произойдет, если выбрать, например, только 3 поля из таблицы, в которой их всего 50? В силу построчного хранения данных в традиционных СУБД (необходимого, как мы помним, для частых операций добавления новых записей в учетных системах) будут прочитаны абсолютно все строки целиком со всеми полями. Это значит, что не важно, нужны ли нам только 3 поля или 50, с диска в любом случае они все будут прочитаны целиком и полностью, пропущены через контроллер дискового ввода-вывода и переданы процессору, который уже отберет только необходимые для запроса.

https://habr.com/post/95181/

Не могу поверить, что это правда, а всё SQL- программирование не более чем бутафория.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643802
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLНе могу поверить, что это правда, а всё SQL- программирование не более чем бутафория.

Это правда. Так же как и то, что человеку, создавшему в таблице 47 ненужных полей
следовало бы оторвать руки и запретить писать статьи. Даже на хабаропомойку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643804
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovЭто правда. Так же как и то, что человеку, создавшему в таблице 47 ненужных полей
следовало бы оторвать руки и запретить писать статьи. Даже на хабаропомойку.


В одной ситуации нужны одни данные, в другой- другие, а в третьей- третьи...
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643806
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLВ одной ситуации нужны одни данные, в другой- другие, а в третьей- третьи...... и, скорее всего, эти данные должны быть разнесены по разным таблицам. Ну, там, третья нормальная форма, все дела.

P.S. SQL не бутафория, а декларативный язык программирования.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643814
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю надо попробовать записывать данные не массивом структур, а структурой массивов. Тогда при чтении можно будет "перепрыгивать" ненужные данные. У меня в среднем 1 файл занимает 700 кб и содержит ~7 полей, т.е. 100 кб на поле. Если учесть, что ssd читает страницами по 4 кб, то подобные пропуски ненужных данных могут привести к повышению производительности.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643815
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLДумаю надо попробовать записывать данные не массивом структур, а структурой массивов.

Я уже говорил, что применение однопроходных алгоритмов может сделать все эти пляски с
бубном ненужными?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643817
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovAlekseySQLДумаю надо попробовать записывать данные не массивом структур, а структурой массивов.

Я уже говорил, что применение однопроходных алгоритмов может сделать все эти пляски с
бубном ненужными?..


Не думаю, что изменение алгоритма обработки данных что- то улучшит, поскольку основной "затык" на скорости чтения данных с диска.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643822
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLНе думаю, что изменение алгоритма обработки данных что- то улучшит, поскольку основной
"затык" на скорости чтения данных с диска.

Именно поэтому уменьшение количества чтений с диска - самая эффективная оптимизация.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643833
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLЕсть 50 ГБ текстовой информации (csv- формат). Для ускорения обращения я перегнал ее в двоичные файлы (выполнив преобразования из текста в нужные типы данных), получив 33 ГБ. В итоге скорость чтения увеличилась в 50/33 раз, т.е. узким местом является не необходимость напрягать процессор для конвертации из текста, а только работа с жестким диском.

В первом вашем шаге вы отказались от текстового представления данных и перешли к двоичному и
это дало производительность в 50/33 (пять третьих чтоли?) раз. В целом - это правильное направление
но только для тех данных которые почти всегда NOT NULL. Для множества строк содержащих вакуум
подобное преобразование могло дать обратный эффект (одно из полей было VARCHAR(255) но реально
из них использовался полный размер только 1 раз а остальные строки не превышали 10-20 символов).
И вы-бы потеряли перформанс на дисковых чтениях "пустоты".

Второй поинт - где вы говорите о том что узкое место - жесткий диск 80% правильный. Это я могу просто
говорить про любую СУБД и выигрывать пари в большем количестве споров. Почти всегда I/O узкое место
за исключением специальных In-memory dbms.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643840
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLНе могу поверить, что это правда, а всё SQL- программирование не более чем бутафория.
Хуже чем ложь может быть только полу-правда. На самом деле SQL программирование как было так и осталось.
Просто были пересмотрены "универсальные" подходы 20-го века. И к ним добавили специализированные
подходы которые исключали некоторые реляционные операции (NoSQL) но при этом добавляли гарантии
того что документ к примеру всегда денормализован (MongoDB) и лежит физически консолидировано на диске.

По поводу статьи на Хабре. Я ее не читал полностью. Но по поводу column-oriented-dbms. Это компромисс
между OLTP и аналитикой с "перекосом" в сторону аналитики. Тоесть вы теряете перформанс будущих
inserts/updates за счет того что нужно поддерживать вертикальную организацию данных но получаете
более экономный режим чтения. И даже не чтения конкретной строки а агрегации (sum/avg/count/min/max)
групп строк.

Кстати подобного эффекта можно ближе достичь если рациональнее разложить колонки в обычной DBMS.
Здесь принцип един. Мы можем разойтись лишь в цифрах. На сколько % больше или быстрее? ХЗ.
Надо делать макет и моделировать. Как вариант - положить ваши 3 горячие колонки в отдельную
табличку. И обеспечивать синхронность через триггеры или mviews.

Кстати по поводу макетов. Я много лет наблюдаю работу DBMS Oracle и убеждаюсь в том что нет универсальной
пули которая всегда подойдет к любым данным + к нагрузке. Поэтому все кто в топике будут вам убедительно советовать
использовать "свою любимую DBMS" или DBMS о которой они 5 минут назад прочитали в Хабре - лжецы.
Они подходят безответственно потому что не им потом разгребать issues - а вам.

Не верьте им.

Чему нужно верить? 1) Нужно взять вашу DBMS и загрузить туда вашу табличку.
2) Нужно смоделировать workload. Тоесть создать программу-симулятор которая будет
максимально близко. Близко настолько насколько это возможно грузить чтениями
вашу табличку. 3) Замерять среднее время на каждом классе реквестов.

После этого можно приступать ко 2-й фазе. Собственно к оптимизации. Это процесс
кропотлиый и сложный. Он - уравнение со многими неизвестными. И вобщем-то дальше
говорить о нем рано. Надо дождаться от вас цифр.

Если у вас вообще нет сведений о workload то - мои поздравления. Мы с вами не сможем
в топике разработать подход который вас спасет.

Ну и конечно-же я повторю слова Джонатана Льюиса. Он говорит - Вы должны "знать" ваши данные.
Тоесть на уровне бизнеса понимать где есть внутренние зависимости и перекосы (skew) в области
статистики. К примеру одно значение foreign key может заполнять 99% строк. Этого невидно
на реляционной диаграмме никогда. Но как знаток системы вы должны знать этот факт
и предотвращать бесполезные планы которые включают к примеру инексную выборку
этого магического ключа.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643859
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonВ первом вашем шаге вы отказались от текстового представления данных и перешли к двоичному и
это дало производительность в 50/33 (пять третьих чтоли?) раз.

Да.

mayton, спасибо, уже все сделано на реальных данных, так что моделирование не требуется. Просто я думал, что сильно сэкономлю по времени времени из- за того, что не надо конвертировать данные. А оказалось, что эта часть несущественна, а основу всего времени занимает чтение данных из файла.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643860
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На "чём" смоделировал.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643877
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно составной индекс делать, по нужным колонкам, тогда данные будут браться из листьев индекса.

И в MS SQL (про другие не знаю) есть возможность добавлять к индексу значения неиндексных столбцов (create index ... include ...)
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643881
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Можно составной индекс делать, по нужным колонкам, тогда данные будут браться из листьев индекса.

И в MS SQL (про другие не знаю) есть возможность добавлять к индексу значения неиндексных столбцов (create index ... include ...)
Автор пишет
Думаю надо попробовать записывать данные не массивом структур, а структурой массивов. Тогда при чтении можно будет "перепрыгивать" ненужные данные. У меня в среднем 1 файл занимает 700 кб и содержит ~7 полей, т.е. 100 кб на поле. Если учесть, что ssd читает страницами по 4 кб, то подобные пропуски ненужных данных могут привести к повышению производительности.
Рассмотрим тривиальные кейсы.
1) Автор делает аналитику по 1-2-3 столбцам (hotfield1, hotfield2, hotfield3). В таком случае (ох как я люблю это делать... додумывать
за автора постановки и названия... это не шутка!) можно :
Код: sql
1.
create index hotFieldsForAnalytic on huge50gbTable(hotfield1, hotfield2, hotfield3);


и в запросах указать оптимизатору что мы рекомендуем INDEX_FAST_FULL_SCAN. И таблица уходит из плана.
Profit.
2) Делаем копию. Маленькую табличку
Код: sql
1.
2.
create table smallTable as select  hotfield1, hotfield2, hotfield3 from huge50gbTable;
// Optionally, triggers after DML, mviews.


Profit.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643906
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНа "чём" смоделировал.

Я не моделировал, а УЖЕ написал программу для реальных данных. И после ее написания увидел прирост в скорости чтения только за счет сокращения размера данных (а не за счет отсутствия конвертации из csv в уже готовые двоичные данные).

Сейчас уже написал процедуры сохранения данных по столбцам с возможностью хранить количество повторяющихся данных (чтобы уменьшить размер там где данные часто повторяются). Завтра проверю какая у таких данных скорость записи / чтения / размер.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643907
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79Можно составной индекс делать, по нужным колонкам, тогда данные будут браться из листьев индекса.

И в MS SQL (про другие не знаю) есть возможность добавлять к индексу значения неиндексных столбцов (create index ... include ...)

MS SQL- темная сторона силы :)
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643908
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLmaytonНа "чём" смоделировал.

Я не моделировал, а УЖЕ написал программу для реальных данных. И после ее написания увидел прирост в скорости чтения только за счет сокращения размера данных (а не за счет отсутствия конвертации из csv в уже готовые двоичные данные).

Сейчас уже написал процедуры сохранения данных по столбцам с возможностью хранить количество повторяющихся данных (чтобы уменьшить размер там где данные часто повторяются). Завтра проверю какая у таких данных скорость записи / чтения / размер.
Когда я говорил о моделировании - я имел в виду моделирование нагрузки на конкретную DBMS.

Ты ведь поднял топик по выбору DBMS. Было-бы странно если-б мы моделировали только С++ приложения. Верно?
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643926
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLArm79Можно составной индекс делать, по нужным колонкам, тогда данные будут браться из листьев индекса.

И в MS SQL (про другие не знаю) есть возможность добавлять к индексу значения неиндексных столбцов (create index ... include ...)

MS SQL- темная сторона силы :)

Наименование БД не критично. Если требуется над данными совершать много действий, я бы выбрал хранение в БД. Если обработка потоковая, то БД не нужна
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39643964
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79AlekseySQLпропущено...


MS SQL- темная сторона силы :)

Наименование БД не критично. Если требуется над данными совершать много действий, я бы выбрал хранение в БД. Если обработка потоковая, то БД не нужна
Потоковая обработка на С++ (а ведь мы находимся в С++) предполагает простые алгоритмы.
Когда мы единовременно обрабатывает только 1 dataRow а после обработки выбрасываем
ее из алгоритма и переходим к следующией со спулом в файл или stdout. Как актор. Или как Rest.

Но если вам нужно сгенерировать отчот с Group By/Order By или не дай бох с оконными функциями
- то complexity вашего решения лавинообразно возрастает. Я могу себе представить SQL отчот
с исходником на 1-2 скролла экрана. Но я не могу себе представить аналогичный ему исходник
С++ с аналогичной бизнес-постановкой. Особенно в части поддержки и развития.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39644066
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ниче что у нас есть специальный форум "Сравнение СУБД"?
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39644069
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не вижу темы сравнения пока. Сравнение предполагает перечислимое множество вариантов.
...
Рейтинг: 0 / 0
Какую БД выбрать?
    #39644091
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
каких-то вы тут сферических коней в вакууме обсуждаете.
не имея представления о самой задаче.

А существо-то дело изложено здесь:
авторНе думаю, что изменение алгоритма обработки данных что- то улучшит, поскольку основной "затык" на скорости чтения данных с диска.

что на русский переводится так - ввод/вывод не является частью моего алгоритма.
я всего лишь хочу заменить медленную функцию на быструю, заменить библиотеку работы с вводом/выводом.
После замены продолжу не считать ввод/вывод частью своего алгоритма.
А если толка не будет, ну что же, зато я буду точно знать,
что сделал всё, что смог, чтобы не считать ввод/вывод частью своего алгоритма.
...
Рейтинг: 0 / 0
25 сообщений из 76, страница 1 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какую БД выбрать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]