Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
Есть 50 ГБ текстовой информации (csv- формат). Для ускорения обращения я перегнал ее в двоичные файлы (выполнив преобразования из текста в нужные типы данных), получив 33 ГБ. В итоге скорость чтения увеличилась в 50/33 раз, т.е. узким местом является не необходимость напрягать процессор для конвертации из текста, а только работа с жестким диском. В двоичном формате данные хранят все поля (в структурах), и читаются также все поля. Поэтому появилось мысль использовать БД, чтобы не читать лишние поля (а преобразования из выборки БД в нужные объекты скорее всего как и в предыдущем случае практически не будет замедлять работу). Какую БД посоветуете при подобном объеме? Подойдут ли для этого dbf- файлы (или они тоже читаются целиком)? Пока критерий один- максимальная скорость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 08:14 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
Хочется добавить, что БД будет работать на том же компьютере, где выполняется обработка этих данных. Другими словами, желательна маленькая нагрузка на процессор. + Хочется простое решение с наличием простой документации Есть что- то подобное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 09:16 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov базы данных с поколоночным хранением ? Спасибо! Я всегда думал, что раз SQL- запросы позволяют указать конкретные поля для выборки, то и чтение происходит только этих полей. Какого же было мое удивление, когда я прочитал это: авторОднако что произойдет, если выбрать, например, только 3 поля из таблицы, в которой их всего 50? В силу построчного хранения данных в традиционных СУБД (необходимого, как мы помним, для частых операций добавления новых записей в учетных системах) будут прочитаны абсолютно все строки целиком со всеми полями. Это значит, что не важно, нужны ли нам только 3 поля или 50, с диска в любом случае они все будут прочитаны целиком и полностью, пропущены через контроллер дискового ввода-вывода и переданы процессору, который уже отберет только необходимые для запроса. https://habr.com/post/95181/ Не могу поверить, что это правда, а всё SQL- программирование не более чем бутафория. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 09:45 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLНе могу поверить, что это правда, а всё SQL- программирование не более чем бутафория. Это правда. Так же как и то, что человеку, создавшему в таблице 47 ненужных полей следовало бы оторвать руки и запретить писать статьи. Даже на хабаропомойку. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 11:53 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЭто правда. Так же как и то, что человеку, создавшему в таблице 47 ненужных полей следовало бы оторвать руки и запретить писать статьи. Даже на хабаропомойку. В одной ситуации нужны одни данные, в другой- другие, а в третьей- третьи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 12:01 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLВ одной ситуации нужны одни данные, в другой- другие, а в третьей- третьи...... и, скорее всего, эти данные должны быть разнесены по разным таблицам. Ну, там, третья нормальная форма, все дела. P.S. SQL не бутафория, а декларативный язык программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 12:22 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
Думаю надо попробовать записывать данные не массивом структур, а структурой массивов. Тогда при чтении можно будет "перепрыгивать" ненужные данные. У меня в среднем 1 файл занимает 700 кб и содержит ~7 полей, т.е. 100 кб на поле. Если учесть, что ssd читает страницами по 4 кб, то подобные пропуски ненужных данных могут привести к повышению производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 12:48 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLДумаю надо попробовать записывать данные не массивом структур, а структурой массивов. Я уже говорил, что применение однопроходных алгоритмов может сделать все эти пляски с бубном ненужными?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 12:50 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovAlekseySQLДумаю надо попробовать записывать данные не массивом структур, а структурой массивов. Я уже говорил, что применение однопроходных алгоритмов может сделать все эти пляски с бубном ненужными?.. Не думаю, что изменение алгоритма обработки данных что- то улучшит, поскольку основной "затык" на скорости чтения данных с диска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 12:58 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLНе думаю, что изменение алгоритма обработки данных что- то улучшит, поскольку основной "затык" на скорости чтения данных с диска. Именно поэтому уменьшение количества чтений с диска - самая эффективная оптимизация. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 13:08 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLЕсть 50 ГБ текстовой информации (csv- формат). Для ускорения обращения я перегнал ее в двоичные файлы (выполнив преобразования из текста в нужные типы данных), получив 33 ГБ. В итоге скорость чтения увеличилась в 50/33 раз, т.е. узким местом является не необходимость напрягать процессор для конвертации из текста, а только работа с жестким диском. В первом вашем шаге вы отказались от текстового представления данных и перешли к двоичному и это дало производительность в 50/33 (пять третьих чтоли?) раз. В целом - это правильное направление но только для тех данных которые почти всегда NOT NULL. Для множества строк содержащих вакуум подобное преобразование могло дать обратный эффект (одно из полей было VARCHAR(255) но реально из них использовался полный размер только 1 раз а остальные строки не превышали 10-20 символов). И вы-бы потеряли перформанс на дисковых чтениях "пустоты". Второй поинт - где вы говорите о том что узкое место - жесткий диск 80% правильный. Это я могу просто говорить про любую СУБД и выигрывать пари в большем количестве споров. Почти всегда I/O узкое место за исключением специальных In-memory dbms. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 13:35 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
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% строк. Этого невидно на реляционной диаграмме никогда. Но как знаток системы вы должны знать этот факт и предотвращать бесполезные планы которые включают к примеру инексную выборку этого магического ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 13:55 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
maytonВ первом вашем шаге вы отказались от текстового представления данных и перешли к двоичному и это дало производительность в 50/33 (пять третьих чтоли?) раз. Да. mayton, спасибо, уже все сделано на реальных данных, так что моделирование не требуется. Просто я думал, что сильно сэкономлю по времени времени из- за того, что не надо конвертировать данные. А оказалось, что эта часть несущественна, а основу всего времени занимает чтение данных из файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 14:39 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
На "чём" смоделировал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 14:41 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
Можно составной индекс делать, по нужным колонкам, тогда данные будут браться из листьев индекса. И в MS SQL (про другие не знаю) есть возможность добавлять к индексу значения неиндексных столбцов (create index ... include ...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 15:22 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
Arm79Можно составной индекс делать, по нужным колонкам, тогда данные будут браться из листьев индекса. И в MS SQL (про другие не знаю) есть возможность добавлять к индексу значения неиндексных столбцов (create index ... include ...) Автор пишет Думаю надо попробовать записывать данные не массивом структур, а структурой массивов. Тогда при чтении можно будет "перепрыгивать" ненужные данные. У меня в среднем 1 файл занимает 700 кб и содержит ~7 полей, т.е. 100 кб на поле. Если учесть, что ssd читает страницами по 4 кб, то подобные пропуски ненужных данных могут привести к повышению производительности. Рассмотрим тривиальные кейсы. 1) Автор делает аналитику по 1-2-3 столбцам (hotfield1, hotfield2, hotfield3). В таком случае (ох как я люблю это делать... додумывать за автора постановки и названия... это не шутка!) можно : Код: sql 1. и в запросах указать оптимизатору что мы рекомендуем INDEX_FAST_FULL_SCAN. И таблица уходит из плана. Profit. 2) Делаем копию. Маленькую табличку Код: sql 1. 2. Profit. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 15:31 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
maytonНа "чём" смоделировал. Я не моделировал, а УЖЕ написал программу для реальных данных. И после ее написания увидел прирост в скорости чтения только за счет сокращения размера данных (а не за счет отсутствия конвертации из csv в уже готовые двоичные данные). Сейчас уже написал процедуры сохранения данных по столбцам с возможностью хранить количество повторяющихся данных (чтобы уменьшить размер там где данные часто повторяются). Завтра проверю какая у таких данных скорость записи / чтения / размер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 17:00 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
Arm79Можно составной индекс делать, по нужным колонкам, тогда данные будут браться из листьев индекса. И в MS SQL (про другие не знаю) есть возможность добавлять к индексу значения неиндексных столбцов (create index ... include ...) MS SQL- темная сторона силы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 17:01 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLmaytonНа "чём" смоделировал. Я не моделировал, а УЖЕ написал программу для реальных данных. И после ее написания увидел прирост в скорости чтения только за счет сокращения размера данных (а не за счет отсутствия конвертации из csv в уже готовые двоичные данные). Сейчас уже написал процедуры сохранения данных по столбцам с возможностью хранить количество повторяющихся данных (чтобы уменьшить размер там где данные часто повторяются). Завтра проверю какая у таких данных скорость записи / чтения / размер. Когда я говорил о моделировании - я имел в виду моделирование нагрузки на конкретную DBMS. Ты ведь поднял топик по выбору DBMS. Было-бы странно если-б мы моделировали только С++ приложения. Верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 17:03 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLArm79Можно составной индекс делать, по нужным колонкам, тогда данные будут браться из листьев индекса. И в MS SQL (про другие не знаю) есть возможность добавлять к индексу значения неиндексных столбцов (create index ... include ...) MS SQL- темная сторона силы :) Наименование БД не критично. Если требуется над данными совершать много действий, я бы выбрал хранение в БД. Если обработка потоковая, то БД не нужна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 17:55 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
Arm79AlekseySQLпропущено... MS SQL- темная сторона силы :) Наименование БД не критично. Если требуется над данными совершать много действий, я бы выбрал хранение в БД. Если обработка потоковая, то БД не нужна Потоковая обработка на С++ (а ведь мы находимся в С++) предполагает простые алгоритмы. Когда мы единовременно обрабатывает только 1 dataRow а после обработки выбрасываем ее из алгоритма и переходим к следующией со спулом в файл или stdout. Как актор. Или как Rest. Но если вам нужно сгенерировать отчот с Group By/Order By или не дай бох с оконными функциями - то complexity вашего решения лавинообразно возрастает. Я могу себе представить SQL отчот с исходником на 1-2 скролла экрана. Но я не могу себе представить аналогичный ему исходник С++ с аналогичной бизнес-постановкой. Особенно в части поддержки и развития. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 18:56 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
А ниче что у нас есть специальный форум "Сравнение СУБД"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 23:46 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
Я не вижу темы сравнения пока. Сравнение предполагает перечислимое множество вариантов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2018, 00:02 |
|
||
|
Какую БД выбрать?
|
|||
|---|---|---|---|
|
#18+
каких-то вы тут сферических коней в вакууме обсуждаете. не имея представления о самой задаче. А существо-то дело изложено здесь: авторНе думаю, что изменение алгоритма обработки данных что- то улучшит, поскольку основной "затык" на скорости чтения данных с диска. что на русский переводится так - ввод/вывод не является частью моего алгоритма. я всего лишь хочу заменить медленную функцию на быструю, заменить библиотеку работы с вводом/выводом. После замены продолжу не считать ввод/вывод частью своего алгоритма. А если толка не будет, ну что же, зато я буду точно знать, что сделал всё, что смог, чтобы не считать ввод/вывод частью своего алгоритма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2018, 02:28 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39643771&tid=2017855]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
51ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 314ms |
| total: | 472ms |

| 0 / 0 |
