powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Сортировка большого файла (в среднем 5 Гб)
25 сообщений из 25, страница 1 из 1
Сортировка большого файла (в среднем 5 Гб)
    #36016393
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.
Решаю такую задачу- есть файл с бинарными данными регулярной повторяющейся структурой: Например, struct { int f1; float f2; int f3; }
Мне нужно обеспечить такие операции над этими данными:
- постраничная выборка подмножеств структур, отсортированных по некоторому полю, например f1 (аналог ORDER BY и LIMIT)
- поиск и сортировка.

Для этих целей у меня возникло два варианта решения:
1) написать Reader для структур и перегнать их в БД и затем использовать
этот вариант оказался очень медленным для очень больших файлов (1...5Гб). Пробовал на MySQL, Postgres.
Поэтому возникла мысль о втором варианте:
2) написать свой аналог специализированной БД, заточенной только под конкретные задачи. Тем более задачи подразумевают лишь чтение данных, а не их изменение.
Мне нужно прежде всего быстродействие, поэтому начав исследовать этот вариант, я подумал, что нужно проиндексировать все поля структуры, тоесть построить для каждого поля f(i) упорядоченный индекс. Таким образом можно решить задачу постраничной выборки с сортировкой.
Для построения индексов я выбрал алгоритм двухфазной сортировки слиянием. Что у меня получилось: первая фаза (когда строятся первые отсортированные списки (размером 16Кб) выполняется довольно быстро: 300 секунд на проце Core2Duo 2Gb оперативки. Пока вторую фазу (слияние подсписков) я еще реализую и там возникает множество сомнений. Но посему вопрос - в правильном ли я направлении двигаюсь? Может есть более эффективный алгоритм?
Что можно посоветовать в подобных случаях?

спасибо за внимание.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36016417
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, забыл уточнить, я пользуюсь алгоритмом сортировки двухфазным многокомпонентным слиянием для сверхбольших отношений, описанный в книге "Системы баз данных", Г.Гарсиа-Молина, Дж. Ульман и др.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36016517
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirage wrote:

> да, забыл уточнить, я пользуюсь алгоритмом сортировки двухфазным
> многокомпонентным слиянием для сверхбольших отношений, описанный в книге
> "Системы баз данных", Г.Гарсиа-Молина, Дж. Ульман и др.

Ну это хорошо, что ты такую хорошую книгу читаешь, и в нужном
месте. Но вот почему у тебя не получилось с БД -- я не понял.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36016775
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С MySQL, говорите, пробовали? И что же,
Код: plaintext
load data infile
(если я ничего не путаю) не помог? Прям вот в разы медленнее, чем у вашего алгоритма индексирования?
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36016815
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor TiegaelС MySQL, говорите, пробовали? И что же,
Код: plaintext
load data infile
(если я ничего не путаю) не помог? Прям вот в разы медленнее, чем у вашего алгоритма индексирования?
нет, так не пробовал. Действовал в лоб - парсил файл и загонял по кортежу.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36016829
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
Код: plaintext
load data infile

За эту команду, кстати спасибо! Попробую поэкспериментировать.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36017036
Nick Mazurkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может вам подумать про Map-Reduce движок?

авторHadoop Sorts a Petabyte in 16.25 Hours and a Terabyte in 62 Seconds and has its green cred questioned because it took 40 times the number of machines Greenplum used to do the same work.


http://highscalability.com/product-hadoop
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36018324
Фотография Alexandr Nikolaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36018343
Фотография А6дуллаh3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну или коммерческий извод БД в оперативке -
TimesTen. 5 Гб данных влезет в 16 Гб оперативки, даже с индексами. 16 Гб в сервере сейчас не редкость.
Причем, сей подход не исключает оптимизации, о которой написано выше. Это можно и нужно сочетать, получится еще быстрее.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36022338
Реалист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirage
1) написать Reader для структур и перегнать их в БД и затем использовать
этот вариант оказался очень медленным для очень больших файлов (1...5Гб). Пробовал на MySQL, Postgres.
....
Но посему вопрос - в правильном ли я направлении двигаюсь?


Увы нет, правильным направлением это назвать нельзя.
От самописки ты абсолютно ничего не выиграешь.
Лучше бы это время потратил на поиск узкого места и оптимизацию БД.
Может быть, что перед заливкой такого большего объема данных просто забыл отключить индексы.
Тогда ничего удивительного нет в наличии тормозов ;-)
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36023229
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реалист
Может быть, что перед заливкой такого большего объема данных просто забыл отключить индексы.
Тогда ничего удивительного нет в наличии тормозов ;-)
Дело в том, что индексы полюбому потом всё равно будут нужны, так как эти данные будут потом активно анализироваться, сортироваться по разным полям, осуществляться поиск по любому из полей или объединяться с другими подобными данными. И как раз одно из требований - обеспечить максимальную производительность анализа.
Поэтому да, я индексирование не отключал при загрузке данных в БД.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36023247
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реалист
Лучше бы это время потратил на поиск узкого места и оптимизацию БД.

Для заливки данных я использую простую таблицу для каждого файла с индексацией всех полей. Таблицы не имеют внешних ключей и являются сами по себе. Как можно в данном случае оптимизировать процесс заливки большого количества данных? 5 Гигов - это всего лишь отдельно взятый файл, коих может быть несколько десятков.
Ждать, пока все эти данные перегонятся в БД только затем, чтобы потом их анализировать в режиме только для чтения - это занимает слишком много времени. Поэтому встал вопрос - написать простенький аналог СУБД для этой конкретной задачи. Тем более структура файлов тривиальная. Нужно лишь решить задачу индексации полей.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36023262
Реалист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirageРеалист
Может быть, что перед заливкой такого большего объема данных просто забыл отключить индексы.
Тогда ничего удивительного нет в наличии тормозов ;-)
Дело в том, что индексы полюбому потом всё равно будут нужны, так как эти данные будут потом активно анализироваться, сортироваться по разным полям, осуществляться поиск по любому из полей или объединяться с другими подобными данными. И как раз одно из требований - обеспечить максимальную производительность анализа.
Поэтому да, я индексирование не отключал при загрузке данных в БД.

Загрузка данных в БД и работа БД - разные задачи, которые можно разнести по времени.
Загрузка большого объема данных при включенных индексах, очень тормозит БД т.к. индексы пересчитываются каждый раз при добавлении новой порции данных .

Обычно, загрузка такого большого объема данных происходит при выключенных индексах, которые пересчитываются один раз , уже после того, как данные загружены.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36023276
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что я сейчас начал делать:

1) пусть есть у нас большой файл с однородной повторяющейся структурой {f1, f2, f3,...,fn} .
2) решено расщепить этот файл на несколько файлов, соответственно каждый файл с именем f(i).dat будет содержать пару:
{f(i), position}
где f(i) - это поле из исходного файла, а position - указатель на структуру в исходном файле, содержащую это поле.
Соответственно в файле f(i).dat все поля f(i) отсортированы в возрастающем порядке.

Это позволит выполнять постраничные запросы с сортировкой по любому из полей (аналог LIMIT + ORDER BY)
Тоесть задача алгоритмически и концептуально уже решена. Остался вопрос с оптимизацией узкого места в этой задаче- сортировка файла f(i).dat
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36023290
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реалист
Загрузка данных в БД и работа БД - разные задачи, которые можно разнести по времени.

К сожалению, разнести во времени это нельзя. Так как анализ данных необходимо вести оперативно, по мере поступления исходных файлов большого объема. Это одно из требований ТЗ.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36023350
Реалист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirage,

"Я напишу лучше" ;-))))

Вы придете к созданию собственной БД, потратив на это море сил и времени, но значительного прироста быстродействия так и не получите. Лучше бы Вы разобрались где у Вас узкое место при работе с БД и устранили именно его, вместо переписывания кода всей базы данных.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36023368
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реалист,

ну лучше может не напишу конечно же. но попытаться стоит :)
а вот где узкое место в БД - так я уже сказал - это заливка данных. Ладно, попробую с отключенными индексами попробовать.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36023593
Реалист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ведь грешным делом подумал, что у тебя задача:
unicornmirage
- постраничная выборка подмножеств структур, отсортированных по некоторому полю, например f1 (аналог ORDER BY и LIMIT)
- поиск и сортировка
Тут не написано "переписать базу данных" ;-)
unicornmirageЛадно, попробую с отключенными индексами попробовать.

Если не трудно, отпиши, что получилось ;-)
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36023666
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirage wrote:

> Дело в том, что индексы полюбому потом всё равно будут нужны, так как
> эти данные будут потом активно анализироваться, сортироваться по разным

Вы ничего не поняли.
Делается это так. Создаётся база, с индексами.
Перед загрузкой индексы дропаются или дизейблятся, в зависимости от
возможностей СУБД. Данные заливаются, без транзакций и индексов, поэтому -
БЫСТРО. Как -- в зависимости от возможностей СУБД, обычно это -- отдельные
возможности загрузки данных, не используемые в OLTP.
Затем индексы создаются, и на БД пускаются обычные OLTP - запросы.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36023686
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, спасибо, уже понял.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36024441
Виталич Да
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirage,
Занимаюсь подобными системами (самые крупные 1600 float(ов) 2500 bool(ов) с дискретностью записи 1 сек) делал как с файловым хранилищем, так и с базой данных (Firebird). Если есть желание пообщаться пишите в личку, поделимся опытом
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36024535
Реалист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталич Да,

А остальные???? Я бы тоже с удовольствием почитал обмен опытом, тем более, что сам на птичке делал некоторые проекты.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36025300
Виталич Да
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реалист,
Просто на все вопросы в общем уже ответили, да так, что добавить не чего, а по MySQL и Postgres я ни чего добавить не смогу, так как с ними не работал.
А по общаться с человеком, который занимается подобными система интересно. Если есть вопросы создовайте топик попробуем пообщаться.
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36025316
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirage,

Возможно, Вам интересно будет почитать описание сортировки в реальных СУБД. Тынц .
...
Рейтинг: 0 / 0
Сортировка большого файла (в среднем 5 Гб)
    #36025525
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senya_Lunicornmirage,

Возможно, Вам интересно будет почитать описание сортировки в реальных СУБД. Тынц .

Очень интересно, спасибо, уже читаю!
Несмотря на то, что всегда остается вариант использовать существующие СУБД, решено попробовать пойти по пути создания специализированной СУБД. (Время на это имеется, так что экономические факторы этого пути не рассматриваю :) )
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Сортировка большого файла (в среднем 5 Гб)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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