Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / собрать по ключам / 23 сообщений из 23, страница 1 из 1
22.01.2014, 11:04:51
    #38534028
mihail_13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
На входе ланные в виде "ключ" (32 байта) "строка" (mediumblob). Ключи не уникальны.
На выходе нужно получить для каждого уникального "ключа" "строку" которая создана по специальному алгоритму из строк соответствующих данному ключу на входе.
Решаю - кладу все пары "ключ" - "строка" в таблицу, после завершения входного потока получаю из таблицы уникальные ключи, поочередно обрабатываю для каждого его строки и сохраняю в выходном файле.
Проблема - индексы сильно тормозят работу при большом количестве записей.
(количество записей около 7000000000, уникальных ключей около 20000000).
Существует ли какое-то более оптимальное решение (с mysql или без него)?
...
Рейтинг: 0 / 0
22.01.2014, 11:13:17
    #38534037
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
Показывайте больше подробностей.
mihail_13индексы сильно тормозят работу при большом количестве записей.Как это было определено?
...
Рейтинг: 0 / 0
22.01.2014, 11:14:01
    #38534039
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
Как именно поступают данные на вход?
...
Рейтинг: 0 / 0
22.01.2014, 11:18:56
    #38534049
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
mihail_13"строку" которая создана по специальному алгоритму из строк соответствующих данному ключуПро это тоже хотелось бы поподробнее. Одно дело простая конкатенация, и совсем другое, например, перемножить матрицы, хранящиеся в этих mediumblob-ах.
...
Рейтинг: 0 / 0
22.01.2014, 11:24:02
    #38534059
mihail_13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
Данные поступают из программы которая обрабатывает другие данные, которые берет с жесткого диска.
При увеличении количества записей в таблице, резко растет время, затрачиваемое процессором на обмен с жестким диском, на котором находится файл индексов (других операций с ним в это время не производится).
...
Рейтинг: 0 / 0
22.01.2014, 11:30:59
    #38534064
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
mihail_13При увеличении количества записей в таблице, резко растет время, затрачиваемое процессором на обмен с жестким диском, на котором находится файл индексов (других операций с ним в это время не производится).Кэш индексов достаточного размера?
Если класть каждую запись отдельно (без, например, конкатенации записей с одним ключом), то нужен будет кэш порядка 70 ГБ, что явно многовато для простого сервера.
Если записи на лету группировать, то хватит примерно 200 МБ, но возрастет количество дисковых операций при группировке.
...
Рейтинг: 0 / 0
22.01.2014, 11:31:39
    #38534065
mihail_13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
miksoftmihail_13"строку" которая создана по специальному алгоритму из строк соответствующих данному ключуПро это тоже хотелось бы поподробнее. Одно дело простая конкатенация, и совсем другое, например, перемножить матрицы, хранящиеся в этих mediumblob-ах.
Если Вы хотите предложить update по ключу, то не стоит - объем данных и так превышает 4Gb, а после update размер файла еще и непредсказуемо вырастет (+ куча затрат на многократные чтения этого файла)

Если нет, то все равно врятли:
Строка имеет побитовую внутреннюю структуру, при слиянии объединенные данные сортируются по одному из полей, после чего сжимаются специальным алгоритмом (если он дает уменьшение длинны) и сохраняется с указанием сжато/не сжато.
...
Рейтинг: 0 / 0
22.01.2014, 11:34:18
    #38534067
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
mihail_13объем данных и так превышает 4GbЭто на каком этапе?
На входе размер одних только ключей составит 4*7000000000=28ГБ.
...
Рейтинг: 0 / 0
22.01.2014, 11:34:25
    #38534068
mihail_13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
miksoftmihail_13При увеличении количества записей в таблице, резко растет время, затрачиваемое процессором на обмен с жестким диском, на котором находится файл индексов (других операций с ним в это время не производится).Кэш индексов достаточного размера?
Если класть каждую запись отдельно (без, например, конкатенации записей с одним ключом), то нужен будет кэш порядка 70 ГБ, что явно многовато для простого сервера.
Если записи на лету группировать, то хватит примерно 200 МБ, но возрастет количество дисковых операций при группировке.
Конечно же кеша не хватает, даже если все оперативку отдам под кеш все равно не хватит.
(про группировку на лету уже сказал)
...
Рейтинг: 0 / 0
22.01.2014, 11:36:53
    #38534071
mihail_13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
miksoftmihail_13объем данных и так превышает 4GbЭто на каком этапе?
На входе размер одних только ключей составит 4*7000000000=28ГБ.
Опечаточка вышла: 4Tb
(А индексы немного покороче - размер индекса ключа в таблице урезан до 6 байт)
...
Рейтинг: 0 / 0
22.01.2014, 11:38:24
    #38534073
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
Я еще не понял задачу и всех условий, но уже есть ощущение, что СУБД тут не поможет и что нужно использовать просто файловую систему (конечно, не валить все в один каталог, а создать разумной глубины дерево) на SSD.
...
Рейтинг: 0 / 0
22.01.2014, 11:50:22
    #38534093
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
mihail_13Опечаточка вышла: 4TbЭто точно не нужно совать в MySQL.
Размер практически на пределе возможного - http://dev.mysql.com/doc/refman/5.5/en/table-size-limit.html
...
Рейтинг: 0 / 0
22.01.2014, 11:50:44
    #38534095
mihail_13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
miksoftЯ еще не понял задачу и всех условий, но уже есть ощущение, что СУБД тут не поможет и что нужно использовать просто файловую систему (конечно, не валить все в один каталог, а создать разумной глубины дерево) на SSD.
Задача в том, что есть некоторый объем данных, который заведомо не влезет в память, и даже его индексы не влезут в память, поэтому и то и другое придется держать на диске. Данные привязаны к ключам (к каждому ключу может быть привязано много записей данных). Данные привязанные к одному ключу должны быть обработаны вместе, но на входе они поступают в случайном порядке, а не упорядоченно по ключам. Поэтому данные привязанные к каждому ключу нужно читать из временного хранилища на жестком диске.

Использование SSD здесь врятли реально - у SSD маленький объем, короткое в таких условиях время жизни и высокая цена.
...
Рейтинг: 0 / 0
22.01.2014, 11:54:09
    #38534099
mihail_13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
miksoftmihail_13Опечаточка вышла: 4TbЭто точно не нужно совать в MySQL.
Размер практически на пределе возможного - http://dev.mysql.com/doc/refman/5.5/en/table-size-limit.html
Это как раз не проблема, 4Tb можно положить в файл, а в mysql сохранить лишь адреса начал записей в файле.
...
Рейтинг: 0 / 0
22.01.2014, 11:57:36
    #38534104
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
mihail_13Это как раз не проблема, 4Tb можно положить в файл, а в mysql сохранить лишь адреса начал записей в файле.Тогда вообще не вижу смысла в СУБД.
Храните в отдельных файлах в файловой системе. Путь и имя файла - ключ.
...
Рейтинг: 0 / 0
22.01.2014, 12:02:52
    #38534111
mihail_13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
miksoftmihail_13Это как раз не проблема, 4Tb можно положить в файл, а в mysql сохранить лишь адреса начал записей в файле.Тогда вообще не вижу смысла в СУБД.
Храните в отдельных файлах в файловой системе. Путь и имя файла - ключ.
20 млн файлов? Файловая система не база данных - она начинает тормозить еще хуже.
...
Рейтинг: 0 / 0
22.01.2014, 12:09:10
    #38534120
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
mihail_1320 млн файлов? Файловая система не база данных - она начинает тормозить еще хуже.С чего бы? Вы пробовали?
С учетом оговорки - "не валить все в один каталог, а создать разумной глубины дерево".
Файловая система, включая ее оглавление, вполне себе кэшируется операционной системой, так что особых проблем на этом пути я не вижу.
Зато не придется читать/писать содержимое файла, если его придется переместить в иерархии в другое место. Например, в каталог для обработанных файлов.
...
Рейтинг: 0 / 0
22.01.2014, 12:26:41
    #38534141
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
mihail_13,

Продублируйте ваш вопрос в более широком смысле и явного без указания СУБД в каком-нибудь другом подфоруме, например, в Сравнение СУБД. Или в Вопрос-Ответ. Может, там найдется и другое предложение.
...
Рейтинг: 0 / 0
22.01.2014, 13:34:21
    #38534252
mihail_13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
miksoftmihail_1320 млн файлов? Файловая система не база данных - она начинает тормозить еще хуже.С чего бы? Вы пробовали?
С учетом оговорки - "не валить все в один каталог, а создать разумной глубины дерево".
Файловая система, включая ее оглавление, вполне себе кэшируется операционной системой, так что особых проблем на этом пути я не вижу.
Зато не придется читать/писать содержимое файла, если его придется переместить в иерархии в другое место. Например, в каталог для обработанных файлов.
Вообще-то пробовал - грустная была картина.
А в одной дирректории или в разных не сильно принципиально. (на скорость не повлияет)
...
Рейтинг: 0 / 0
22.01.2014, 13:38:57
    #38534264
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
mihail_13А в одной дирректории или в разных не сильно принципиально. (на скорость не повлияет)Для самой файловой системы, может, это и не критично, но достаточно критично для других программ, которые с ней работают.
...
Рейтинг: 0 / 0
22.01.2014, 16:08:52
    #38534545
mihail_13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
Если не использовать базу, надо делать один файл на данные и файл на индексы и уметь строить и использовать эти индексы. Выигрыш не очевиден.
...
Рейтинг: 0 / 0
23.01.2014, 17:46:22
    #38535884
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
mihail_13,

Тут - 15452846 - советуют попробовать Elliptics. Еще про него недавно статья на хабре была.
Посмотрите, вдруг поможет.
...
Рейтинг: 0 / 0
23.01.2014, 17:47:43
    #38535885
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
собрать по ключам
mihail_13один файл на данные и файл на индексыНе вижу чем это принципально отличается от раздела на диске и файлового оглавления. Кстати, строго говоря, файловая система - это тоже СУБД.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / собрать по ключам / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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