@nodejs_ru

Страница 500 из 2748
Aleksey
14.01.2017
12:19:51
это, в плане, файл такого размера и надо его внутри отсортировать?

юзкейс неясен. а в целом, бенчи одинаковые будут, думаю, для всех достаточно низкоуровневых языков. узким местом станет, скорее, сама файловая система.

Google
1
14.01.2017
12:25:07
Спасибо

Aleksey
14.01.2017
12:26:12
если хочется прям мегаоптимизации именно сортировки - сишник или Lua. да и js вполне. но IO вполне себе угробит любые оптимизации на хреновом железе/OS

Vladimir
14.01.2017
12:26:55
> @aleksxor Lua што?

1
14.01.2017
12:27:13
А сейчас более подробно опишу ситуацию. Есть множество файлов со строками. Таких файлов может быть несколько миллионов, а общее колличество строк стремится в нескольким десяткам миллиардов. БД на таких размерах и вообще стандартные методы сортировки просто не справляются. Сейчас есть алгоритм сортировки слиянием этих файлов, но хотелось бы написать что-то подобное на ноже и проверить проихводительность

Aleksey
14.01.2017
12:28:54
> @aleksxor Lua што?
не в курсе что это или просветишь почему не подходит как довольно шустрый язык?

Vladimir
14.01.2017
12:29:40
Рекомендация для чего либо "сишник или Lua" выглядит абсурдно

Aleksey
14.01.2017
12:30:55
субъективно. для реализации алгоритма сортировки подходят оба. сишник если прямые руки. луа как, думаю, штука которая лучше всего остального умеет оптимизировать код

Vladimir
14.01.2017
12:32:38
> @aleksxor луа как, думаю, штука которая лучше всего остального умеет оптимизировать код вот это абсолютный бред

1
14.01.2017
12:32:51
А что можете сказать касаемо алгоритма сортировки? Что еще кроме обычного слияния можно придумть?

Andrew
14.01.2017
12:34:02
А что можете сказать касаемо алгоритма сортировки? Что еще кроме обычного слияния можно придумть?
т.е. в каждом файле какое-то количество произвольных строк, а тебе нужно эти строки выдавать в упорядоченном виде или как?

Google
1
14.01.2017
12:34:47
т.е. в каждом файле какое-то количество произвольных строк, а тебе нужно эти строки выдавать в упорядоченном виде или как?
Да, эти отсортированные строки будут уже использоваться в дальнейшем для обработки данных.

Andrew
14.01.2017
12:35:10
я так понимаю у тебя не просто набор этих файлов, а постоянно новые подливаются?

Vladimir
14.01.2017
12:35:21
и есть бенчмарки, которые подверждают что luajit быстрее чем все остальное вообще?

Andrew
14.01.2017
12:35:57
а строки какой длины?

1
14.01.2017
12:36:52
Да. Подливаются сразу как только закончится обработка прошлой пачки данных, и чем быстрее это произойдет, тем лучше. Строки вида 123123:323123. Вотрировать нужно по первому числу

Andrew
14.01.2017
12:37:45
а пачка это сколько?

1
14.01.2017
12:37:56
А БД уже проверялось или это догадки? Залить в PG, добавить индексы, выделить побольше памяти для сортировки.
В БД уже пробовали. Сейчас очень ограниченны ресурсы и только потому делаем это не в дазе, а на файлах. Сортировка в базе на порядок больше ресурсов требовала и на текущем сервере просто не укладывалась в сроки

а пачка это сколько?
Еще столько же

Andrew
14.01.2017
12:38:11
т.е. у тебя есть некий набор данных, в файлах, строками, ты их отсортировал одноразово и все? потом следюущий набор внутри себя и так каждый раз?

Andrew
14.01.2017
12:39:07
первое число насколько большим может быть?

Aleksey
14.01.2017
12:39:40
и есть бенчмарки, которые подверждают что luajit быстрее чем все остальное вообще?
про все остальное речь не шла. js вполне себе запинывает на алгоритмах

Vint
14.01.2017
12:39:52
В БД уже пробовали. Сейчас очень ограниченны ресурсы и только потому делаем это не в дазе, а на файлах. Сортировка в базе на порядок больше ресурсов требовала и на текущем сервере просто не укладывалась в сроки
На порядок - это прям в 10 раз? Странно. Но в любом случае, это более оптимальный и удобный способ, если задача не разовая, а постоянная при поступлении новых данных. Я бы игрался с памятью и прочими оптимизация в PG. Вот такое 123123:323123 можно разбить на два поля, например, и следать int вместо текста.

Andrew
14.01.2017
12:40:10
а все это добро разом в оперативку влазит?

Vladimir
14.01.2017
12:40:24
пруф?

Andrew
14.01.2017
12:41:21
ну модули ядра на ноде на сях написаны, я не думаю что ты тупо на сях напишешь сильно оптимальнее, будет конечно оверхед некоторый, но не в разы я считаю

Google
Andrew
14.01.2017
12:41:42
Не хватит оперативки
а сколько сейчас оперативки и сколько это все добро занимает в сумме места?

обычный комп позволяет до 32 гигов спокойно поставить, и деньги не столь велики для подобных задач

1
14.01.2017
12:42:18
Andrew
14.01.2017
12:42:28
а не тогда не вариант

но, если объём поделить, допустим, на 20, то он уже будет влезать в оперативку

т.е. за 20 итераций можно отсортировать 20 порций

Andrew
14.01.2017
12:44:11
если их грамотно разложить по 20 файлам

1
14.01.2017
12:44:46
Ну, а потом только построчно, если так

Andrew
14.01.2017
12:44:51
да

в оперативе полюбому быстрее будет сортировка

а ключи дублируются?

1
14.01.2017
12:45:30
Да, первая часть будет повторяться и не раз

Andrew
14.01.2017
12:45:44
в таком случае как сортируешь при дублирующемся ключе?

1
14.01.2017
12:45:47
Вторая тоже, но их комбинация уникальна

Andrew
14.01.2017
12:45:48
или отбрасываешь?

значит там где первые совпали, надо по второму сортировать?

1
14.01.2017
12:46:45
Нет, только по первому

По крайней мере пока

Andrew
14.01.2017
12:47:22
я бы так сделал

Google
Vint
14.01.2017
12:47:23
Andrew
14.01.2017
12:47:30
берешь максимальное значение первого ключа

делишь его на 30

Aleksey
14.01.2017
12:47:49
пруф?
https://gist.github.com/spion/3049314 как эталон. там в комментах привели и крутую С версию, но кода и знаний чтобы ее написать, надо явно поболе чем для тупого алгоритма на луа

Andrew
14.01.2017
12:47:52
проходишь все файлы и раскладываешь строки по 30 файлам согласно диапазона ключей

дальше сортируешь отдельно каждый файл, благо он в память по идее должен взалить, если нет, тогда не 30 а 40 50 или 60

получаешь дцать файлов с отсортированным контентом внутри

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

Admin
ERROR: S client not available

Vint
14.01.2017
12:49:52
Весь
Печально. Читать исходники через stream и сравнивать с топом - было бы несложно. А так, весь result слишком жирный, в память не влезет. Надо пытаться имплементировать максимально быстрый механизм external merge sort. Они уже описаны и есть готовые алгоритмы.

Aleksey
14.01.2017
12:50:29
увы, это плохой бенчмарк
удобная позиция ) по мне так, вообще, эталонный. четко показывает что писать шустрые пргоги на луа гораздо проще чем на сях

1
14.01.2017
12:51:13
Ну и последний вопрос, уточняющий: c++, luajit или нода?

Vladimir
14.01.2017
12:51:23
Я не знаю, как там полчилось у lua быстрее чем c и с++

1
14.01.2017
12:51:24
И да, всем спасибо за помощь

Andrew
14.01.2017
12:52:01
Ну и последний вопрос, уточняющий: c++, luajit или нода?
в сях задолбаешься за памятью следить

про луа не знаю

Vladimir
14.01.2017
12:52:04
Но в случае с луа и нодой как минимум во время включено время инициализации

Google
Aleksey
14.01.2017
12:52:04
легко. luajit очень хорошо умеет в оптимизацию. гораздо лучше среднего человека

Andrew
14.01.2017
12:52:15
как нода такие объёмы будет хавать тоже вопрос

Andrew
14.01.2017
12:52:32
в любом случае пиши в файлы не построчно, а пачками, иначе на иопсах будешь большой оверхед иметь

Vladimir
14.01.2017
12:52:33
нода - не равно v8

Aleksey
14.01.2017
12:52:34
компилятор сам по себе в оптимизацию обычно не умеет

Vladimir
14.01.2017
12:52:40
-03 знаешь что такое?

Aleksey
14.01.2017
12:53:44
вот именно. а есть еще -01 и другое. к компилятору напрямую не относится

можно компилять без оптимизации, вообще

Vladimir
14.01.2017
12:54:13
можно, но так никто не делает

Aleksey
14.01.2017
12:55:45
оптимизация и компиляция разные процессы. luajit пишет Mike Pall. на мой вкус, самый способный. дотаточно глянуть на список оптимизаций которые luajit умеет

Aleh
14.01.2017
12:55:52
Aleksey
14.01.2017
12:56:41
так себе агрумент

Vladimir
14.01.2017
12:57:17
Конечно, один мужик в подвале может тоже самое сделать

Aleksey
14.01.2017
12:57:30
удобно чучело пинать?

Vladimir
14.01.2017
12:57:33
Но не суть - допустим lua быстрее C++

Осталось ответить на вопрос - почему

Без этого ответа наиболее вероятно, что это некорректный бенчмарк

Aleksey
14.01.2017
12:59:46
опять чучело пинаешь. я не говорил что луа быстре сей. код на луа через luajit быстрее того что напишет средний сишный кодер. это наиболее близко к моей точке зрения.

Vladimir
14.01.2017
13:00:10
Луа быстрее в этом бенчмарке

Страница 500 из 2748