|
|
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
А что такое TStringList? Это массив строк? Он непрерывно хранится в памяти? Что происходит, если добавляешь элемент, например, в середину? А если несколько StringList'ов, и попеременно добавлять и туда, и сюда, то они фрагментируются? Или полностью копируется весь StringList на новое место? А вообще, мне нужно отсортировать несколько (сотен) миллионов строк, удалив одинаковые. Пока StringList с Sorted=true работает, но, возможно, медленно. Можно ли сделать что-то принципиально быстрее? Использую несколько StringList'ов, чтобы разные записи, например, начинающиеся на разные буквы, сохранять в разных StringList'ах. Так, наверно, быстрее (сортировать несколько маленьких, чем один большой). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 02:17 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registeredА что такое TStringList? Это массив строк? Он непрерывно хранится в памяти? Что происходит, если добавляешь элемент, например, в середину? А если несколько StringList'ов, и попеременно добавлять и туда, и сюда, то они фрагментируются? Или полностью копируется весь StringList на новое место? А вообще, мне нужно отсортировать несколько (сотен) миллионов строк, удалив одинаковые. Пока StringList с Sorted=true работает, но, возможно, медленно. Можно ли сделать что-то принципиально быстрее? Использую несколько StringList'ов, чтобы разные записи, например, начинающиеся на разные буквы, сохранять в разных StringList'ах. Так, наверно, быстрее (сортировать несколько маленьких, чем один большой). В Вашем случае прямо таки напрашивается использование какой нибудь СУБД. Возможно встроенной, например SQLite или Firebird embedded. Загоняете массив строк в табличку, а далее уже SQL выражениями делаете любую выборку. Все современные СУБД делают это очень быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 06:54 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
black-manatee, СУБД? Ради сортировки строк? Реально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 10:12 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registered, Быстрей можно всегда, только это ручками делать надо. Например побить свой лист на много более мелких. Так сортировка будет работать значительно быстрей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 10:34 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registeredА что такое TStringList? Это массив строк? Он непрерывно хранится в памяти? Что происходит, если добавляешь элемент, например, в середину? А если несколько StringList'ов, и попеременно добавлять и туда, и сюда, то они фрагментируются? Или полностью копируется весь StringList на новое место? А вообще, мне нужно отсортировать несколько (сотен) миллионов строк, удалив одинаковые. Пока StringList с Sorted=true работает, но, возможно, медленно. Можно ли сделать что-то принципиально быстрее? Использую несколько StringList'ов, чтобы разные записи, например, начинающиеся на разные буквы, сохранять в разных StringList'ах. Так, наверно, быстрее (сортировать несколько маленьких, чем один большой).1. фиговые дела происходят, блочное копирование 2. незначительно метод сортировки в узких случаях нужно подбирать индивидуально, реализация сортировки в TSringList от дельфи, редкий позор + сортировка Хаора очень чувствительна к функции сравнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 11:10 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. + можно через TTask распараллелить по кускам и потом склеить, будет быстрее в зависимости от кол-ва ядер и процессоров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 11:30 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Я тут на коленке накидал распараллеливание, получил на 10 млн строк на 1 процессоре и 4 ядрах в 1 поток заняло 10 секунд разбиение на 4 равные части сортировка каждой части на отдельном ядре слияние 4 частей в 1 массив заняло 5 секунд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 11:54 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
X-Cite, вся беда таких тестов что они не учитывают реальные данные и особенности алгоритмов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 12:03 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
X-CiteЯ тут на коленке накидал распараллеливание, получил на 10 млн строк на 1 процессоре и 4 ядрах в 1 поток заняло 10 секунд разбиение на 4 равные части сортировка каждой части на отдельном ядре слияние 4 частей в 1 массив заняло 5 секунд ты бы на нормальных строках делал, длиной хотя бы 50 знаков и из букв... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 12:05 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Дегтярев Евгенийblack-manatee, СУБД? Ради сортировки строк? Реально? Сортировка с выкидыванием дублей. TStringList так вроде не умеет. А в чем собственно проблема ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 12:34 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
А можно еще хешик сделать. На первые несколько букв строки. И сортировать по хэшу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 12:42 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
black-manatee, То есть вы не видите проблемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 12:43 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
black-manateeСортировка с выкидыванием дублей. TStringList так вроде не умеет. Да ну правда что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 12:52 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Tactical Nuclear Penguinты бы на нормальных строках делал, длиной хотя бы 50 знаков и из букв... Это не важно.. Цель была оценить распараллеливание по виртуальным процессорам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 12:54 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Дегтярев Евгенийblack-manatee, То есть вы не видите проблемы? Озвучите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 13:43 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
black-manatee, оставим, что ради сортировки нужно в приложение притащить БД пойдем дальше ТС пишет что исходный вариант (сортировка в памяти) работает, но медленно для примера возьмем результат X-Cite, у него сортировка заняла 10 сек для начала сравните, плз, сколько у вас займет "загнять массив строк в таличку" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 13:59 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Дегтярев Евгенийblack-manatee, оставим, что ради сортировки нужно в приложение притащить БД пойдем дальше ТС пишет что исходный вариант (сортировка в памяти) работает, но медленно для примера возьмем результат X-Cite, у него сортировка заняла 10 сек для начала сравните, плз, сколько у вас займет "загнять массив строк в таличку" Думаю быстрее, чем сортировка (если загнать к примеру файл в блоб и скриптом или процедурой уже запихнуть в табличку). Ну и сортировка будет точно быстрее. Но вообще речь не об этом. Человек работает с сотнями миллионов строк. Эти строки у него откуда то берутся (какие нибудь логи или что-то еще), записываются в какое-то хранилище (текстовые файлы), потом неким образом обрабатываются (сортируются и удаляются дубли), потом опять куда-то записываются (в те же или другие текстовые файлы), а затем очевидно где-то далее используются. То есть по сути речь идет о простой, но достаточно объемной БД, в качестве каковой registered использует текстовые файлы. По моему очевидно, что использование СУБД в данном случае для всей этой байды реально напрашивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 15:17 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
black-manateeПо моему очевидно, что использование СУБД в данном случае для всей этой байды реально напрашивается. А мне очевидно что напрашивается ElasticSearch + Kibana ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 16:01 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Кстати, TArray.Sort сортирует в другом порядке, нежели StringList. Пока что получилось, TArray где-то в 2 раза быстрее. 3327471 записей (98.1 мб) 25,125 сек - сорт StringList после загрузки 13,953 сек - сорт TArray<ansistring> TArray - это то же самое, что и array of string? Мне этот синтаксис непривычен. Чем он хорош? Тем, что там есть Sort? А что мешало сделать отдельную функцию Sort для массива? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 16:12 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
http://docwiki.embarcadero.com/Libraries/Rio/en/System.Generics.Collections.TArray Это просто удобная обертка для статических дженериковских функций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 16:26 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Ну и сам тип конечно... http://docwiki.embarcadero.com/Libraries/Rio/en/System.TArray ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 16:28 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
StringList сортирует так, что одинаковые записи, различающиеся строчными и прописными буквами, будут соседними, а TArray - по коду символа, т.е., они будут в разных местах. Можно ли сделать, чтобы по-другому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 19:15 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registered, AnsiUpperCase. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 19:28 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Там (в StringList) даже не посимвольно сравнивает, а, к примеру, test031 и test-03-1 будут вперемешку. function TStringList.CompareStrings(const S1, S2: string): Integer; begin if CaseSensitive then Result := AnsiCompareStr(S1, S2) else Result := AnsiCompareText(S1, S2); end; Добавил свой компаратор, такой: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Теперь сортирует так же, как StringList, но в 3 раза медленнее. StringList - 9,641 сек TArray.Sort (comparer) - 25,859 сек TArray.Sort (по умолчанию) - 4,234 сек Выборка та же, что и в прошлый раз, только тогда был комп загружен. И зачем я всё это делал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 20:59 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registeredИ зачем я всё это делал?Получил ценный опыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 21:17 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registered, авторТеперь сортирует так же, как StringList, но в 3 раза медленнее. мода требует жертв. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 21:18 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registeredТеперь сортирует так же, как StringList, но в 3 раза медленнее. В одном случае сортируешь String, в другом AnsiString получаемые в результате конвертирования из String. Отсюда и просадка такая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 21:29 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeyполучаемые в результате конвертирования из String ...наоборот, в смысле. Короче, замени AnsiString на String везде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 21:39 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Со String - 10,297 сек Хотя уже переделал обратно в StringList ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 23:23 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registeredStringList сортирует так, что одинаковые записи, различающиеся строчными и прописными буквами, будут соседними, а TArray - по коду символа, т.е., они будут в разных местах. Можно ли сделать, чтобы по-другому? Думаю TDictionary тебя спасёт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2019, 09:04 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyKazantsev Alexeyполучаемые в результате конвертирования из String ...наоборот, в смысле. Короче, замени AnsiString на String везде.А почему с System.AnsiStrings.AnsiCompareStr медленно? Тогда не должно конвертироваться в String. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2019, 12:30 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registeredА почему с System.AnsiStrings.AnsiCompareStr медленно? Тогда не должно конвертироваться в String. Насколько я помню, всё современное API винды уже давно юникодовое, а когда используются старые вызовы (с суфиксом A) то внутри происходит преобразование в юникод и последующий вызов нужного юникодового метода. Таким образом, преобразование строк просто переносится на уровень системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2019, 12:38 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Я тут тест проводил код теста Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Intel(R) Core(TM) i5-8600 CPU @ 3.10GHzIntel(R) Core(TM) i5-8600 CPU @ 3.10GHz Сокетов: 1 Ядра: 6 Логических процессоров: 6 Виртуализация: Включено Кэш L1: 384 КБ Кэш L2: 1,5 МБ Кэш L3: 9,0 МБ 1 = 8817 мс (В 1 поток) 6 = 4388 мс (В 6 потоков = кол-во логических процессоров) Intel(R) Xeon(R) Gold 6146 CPU @ 3.20GHzIntel(R) Xeon(R) Gold 6146 CPU @ 3.20GHz Сокетов: 2 Ядра: 24 Логических процессоров: 24 Виртуализация: Отключено Поддержка Hyper-V: Да Кэш L1: 1,5 МБ Кэш L2: 24,0 МБ Кэш L3: 49,5 МБ 1 = 13992 мс (В 1 поток) 24 = 7560 мс (В 24 потока = кол-во логических процессоров) Здесь был интересный момент. Все 24 лп не напрягались, ощущение что уперлось во что-то другое, возможно память. Intel(R) Xeon(R) CPU E5-4640 0 @ 2.40GHzIntel(R) Xeon(R) CPU E5-4640 0 @ 2.40GHz Сокетов: 4 Виртуальные процессоры: 16 Виртуальная машина: Да Кэш L1: Н/Д 1 = 41553 мс (В 1 поток) 16 = 13800 мс (В 16 потоков = кол-во виртуальных процессоров) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2019, 23:24 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
А разделение как реализовано? Если разделить массив на X частей, и каждую отсортировать, а потом слить, то он будет неотсортированным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2019, 23:32 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registeredА разделение как реализовано? Если разделить массив на X частей, и каждую отсортировать, а потом слить, то он будет неотсортированным. Merge sort уже отменили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2019, 23:33 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Кстати... Можно сделать merge sort и проверить результат... Потому что моя цель была разделить именно на N частей и сделать TArray.Sort каждой части в своей таске, а потом их склеить через merge join По сути: 1) Делим 1 массив на N - выполняется в одном потоке 2) Сортируем N частей в N тасках. При этом надеемся TThreadPool корректно их распихал в N потоков. А ОС корректно их разнесла по процессорам/ядрам. 3) Ждем всех, чтобы сделать merge join 4) Делаем merge join из N массивов в 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2019, 23:43 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
X-Cite, Что-то у тебя плохо масштабируется по ядрам. Сейчас проверил твой пример на своей версии из dxThreading на своем ноуте: 1 = 11641 8 = 3126 i7-4710HQ 2.5GHz ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2019, 01:15 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registered, Ты не послушаешь, но это правда самые быстрые способы. 1. Добавить строки в TStringList(а лучше в динамический массив, предварительно установив длину). Отсортировать. Пройтись от последнего к первому и удалить дубликаты. Есть более продвинутый способ удаления дубликатов, но ты его, скорее всего не потянешь ) 2. Сделать TDictionary и выполнять AddOrSetValue. Потом сделать ToArray и отсортировать массив. Если дубликатов много - лучше сработает первый способ. Если мало - второй. Можно извратиться и взять Rapid.Generics - там сортировки и словари быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2019, 07:52 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Голландец, Наоборот. Дубликатов мало - первый способ. Много - словари ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2019, 07:55 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Вообще-то, у TStringList есть свойство Duplicates, которое можно выставить в dupIgnore. Также у него есть свойство Capacity. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2019, 08:56 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registered, сколько у тебя различных строк после отсева дубликатов в реальных данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2019, 10:46 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
white_nigger, Потому что на коленке писаная за 10 минут для этого топика) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2019, 13:14 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
registered, чо-то 100 лямов мало :( надо не ниже 3,5 лярдов, а лучше 5 (с запасом, так сказать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2019, 14:29 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
X-Cite, Понятно. Кстати, возможно у меня использовались только 4 ядра. Надо будет по коду глянуть. Я уже не помню как рассчитывал количество потоков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2019, 13:04 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
white_niggerX-Cite, Понятно. Кстати, возможно у меня использовались только 4 ядра. Надо будет по коду глянуть. Я уже не помню как рассчитывал количество потоков Я не думал, просто взял кол-во задач = кол-ву логических процессоров, хотя можно поиграться... Параллелилось норм... я же merge сделал в основном потоке, не параллелил его и в лоб к тому же, а не по книжке.... Да и копирование можно было сделать в своем чанке... еще 100 мс сэкономить... 19368 - основной поток 07.07.2019 14:58:59.747; 19368: ->Run 07.07.2019 14:58:59.887; 19368: Copy = 125 07.07.2019 14:59:01.846; 5472: Chunk1 = 1958 07.07.2019 14:59:01.876; 16680: Chunk2 = 1989 07.07.2019 14:59:01.888; 5364: Chunk3 = 2006 07.07.2019 14:59:01.896; 10712: Chunk4 = 2011 07.07.2019 14:59:01.896; 12284: Chunk5 = 2014 07.07.2019 14:59:01.922; 15260: Chunk6 = 2037 07.07.2019 14:59:01.922; 19368: All wait = 2037 07.07.2019 14:59:04.259; 19368: merge = 2338 07.07.2019 14:59:04.259; 19368: <-Run Основной посыл был в том, что даже на коленке наспех реализация распараллеливания сортировки выгоднее. А не прочитали в книжке 199x года, что есть вот такой "замечательный" TStringList и давай его везде пихать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2019, 15:02 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
X-Cite, QuickSort на выходе может дать 2 диапазона. Один можно продолжить выполнять в том же потоке, а второй - отдать в пул. Тогда не придётся делать мердж. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2019, 15:34 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Поскольку задача исключительно на дубликаты, сортировка тут напрочь не нужна. Хэш-таблица даёт тот же результат, но имеет O(1) вместо O(N*log2(N)). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2019, 16:15 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПоскольку задача исключительно на дубликаты, сортировка тут напрочь не нужна. Хм... https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1314494&msg=21919544 А вообще, мне нужно отсортировать несколько (сотен) миллионов строк, удалив одинаковые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2019, 16:17 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
> Все 24 лп не напрягались, ощущение что уперлось во что-то другое, возможно память. NUMA? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2019, 17:43 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
1) проанализировать, откуда эти строки, собственно, берутся, может проще исключить возникновение дублей 2) проанализировать задачу, можно ли ее решить в другом слое приложения - в той же упомянутой СУБД 3) если ничего не поучилось, то сортировать в приложении, но это поражение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2019, 23:48 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Дегтярев Евгений> Все 24 лп не напрягались, ощущение что уперлось во что-то другое, возможно память. NUMA? Да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2019, 09:33 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
X-CiteДегтярев Евгений> Все 24 лп не напрягались, ощущение что уперлось во что-то другое, возможно память. NUMA? Да Вроде бы Тема о сортировке большых(?) объёмах данных? На клиенте? А вы тут... PUMA зачем-то... Вы бы ещё IBM & Cray Corp вспомнили... SAS мозгололомоы разбежались по конторам по тематике... ___ Собственно вопрос. Кто в состоянии обработать 100 миллионов строк (а завтра и 100 миллиардов)? Тут нужен сервис ленивый (а ля LazyReader/LazyWriter) Клиенту-то это зачем? Распределённая сеть с распределёнными транзакциями ради тупой сортировки(?) неизвестно чего(ТС?)??? Да ещё на Дельфи? Не верю! Клиент пусть берёт нужную выборку из своего OLAP и сортирует, как жопса скажет нужные ему поля в нужном ему порядке ______________ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 00:23 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
GatorА вы тут... PUMA зачем-то... whaat? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 07:34 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Дегтярев Евгений, Pardon, NUMA ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 11:23 |
|
||
|
Сортировка сотен миллионов строк с удалением дублей
|
|||
|---|---|---|---|
|
#18+
Gator, В первом сообщении был затронут общий вопрос сортировки, неважно где. Меня же клиентские машины вообще не интересуют, у нас вся логика в бэкэнде на сервисах. Поэтому и рассматриваю этот вопрос исключительно на серверной части. К тому же в своих тестах привел кейс для своей машины, считай клиентской, и для двух разных серверов. Моя выиграла из-за того что частота CPU выше, хотя я пробовал на физическом сервере с такой же частотой и он все равно медленнее оказался. Виртуальные серверы понятно, что проиграли. А вопрос про NUMA возник из-за того, что меня удивило, что 24 ЛП не напрягались, и как я понял это может быть причиной, когда данные оказались в памяти не того сокета, куда прикреплен процессор. Никакие распределенные сети не нужны. Нужно чтобы TArray.Sort<T> работал быстро неважно где и использовал все возможности машины на которой выполняется код. P.S. Создал в QC 3 таски: Одна на multithreading сортировку в TArray.Sort<T> - добавить возможность включения Одна на поддержку NUMA в менеджере памяти - актуально для бэкенда (на гитхабе нашел коммент в FastMM на поддержку, но он так и остался комментом [planned: support for multiple per-NUMA-node allocators]) Одна на поддержку NUMA в TThredPool - актуально для бэкенда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 15:15 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2039285]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
175ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 511ms |

| 0 / 0 |
