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

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

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

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

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

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

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

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

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


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

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

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

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


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

Именно поэтому уменьшение количества чтений с диска - самая эффективная оптимизация.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.05.2018, 13:35
    #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
13.05.2018, 13:55
    #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
13.05.2018, 14:39
    #39643859
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какую БД выбрать?
maytonВ первом вашем шаге вы отказались от текстового представления данных и перешли к двоичному и
это дало производительность в 50/33 (пять третьих чтоли?) раз.

Да.

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

И в MS SQL (про другие не знаю) есть возможность добавлять к индексу значения неиндексных столбцов (create index ... include ...)
...
Рейтинг: 0 / 0
13.05.2018, 15:31
    #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
13.05.2018, 17:00
    #39643906
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какую БД выбрать?
maytonНа "чём" смоделировал.

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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