Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Сортировка большого файла (в среднем 5 Гб) / 25 сообщений из 25, страница 1 из 1
29.05.2009, 17:09
    #36016393
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка большого файла (в среднем 5 Гб)
Привет всем.
Решаю такую задачу- есть файл с бинарными данными регулярной повторяющейся структурой: Например, 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
29.05.2009, 17:18
    #36016417
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка большого файла (в среднем 5 Гб)
да, забыл уточнить, я пользуюсь алгоритмом сортировки двухфазным многокомпонентным слиянием для сверхбольших отношений, описанный в книге "Системы баз данных", Г.Гарсиа-Молина, Дж. Ульман и др.
...
Рейтинг: 0 / 0
29.05.2009, 18:04
    #36016517
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка большого файла (в среднем 5 Гб)
unicornmirage wrote:

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

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

За эту команду, кстати спасибо! Попробую поэкспериментировать.
...
Рейтинг: 0 / 0
30.05.2009, 10:28
    #36017036
Nick Mazurkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка большого файла (в среднем 5 Гб)
Может вам подумать про 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
01.06.2009, 10:03
    #36018324
Alexandr Nikolaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка большого файла (в среднем 5 Гб)
...
Рейтинг: 0 / 0
01.06.2009, 10:16
    #36018343
А6дуллаh3
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка большого файла (в среднем 5 Гб)
Ну или коммерческий извод БД в оперативке -
TimesTen. 5 Гб данных влезет в 16 Гб оперативки, даже с индексами. 16 Гб в сервере сейчас не редкость.
Причем, сей подход не исключает оптимизации, о которой написано выше. Это можно и нужно сочетать, получится еще быстрее.
...
Рейтинг: 0 / 0
02.06.2009, 22:56
    #36022338
Реалист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка большого файла (в среднем 5 Гб)
unicornmirage
1) написать Reader для структур и перегнать их в БД и затем использовать
этот вариант оказался очень медленным для очень больших файлов (1...5Гб). Пробовал на MySQL, Postgres.
....
Но посему вопрос - в правильном ли я направлении двигаюсь?


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

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

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

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

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
03.06.2009, 12:31
    #36023290
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка большого файла (в среднем 5 Гб)
Реалист
Загрузка данных в БД и работа БД - разные задачи, которые можно разнести по времени.

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

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

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

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

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

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

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

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

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

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

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


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