Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
например, есть несколько файлов весом по 1 ТБ. Оперативка ограничена. Из них надо считывать некоторые элементы и записывать в другой файл. Подходят ли для <ifstream> и <ofstream>? Правильно я понимаю, что они почти не поедают память, читают один объект за другим, запоминая позицию, а максимальная занятая память равна максимальной последовательности символов в файле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2015, 11:46 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
log_here, так же, как и файлы размером 1 кбайт. для открытия файла и его обработки память почти не нужна. Подходят ли для <ifstream> и <ofstream>? мало того, что подходят, они еще и специально для этого были придуманы. Правильно я понимаю, что они почти не поедают память, читают один объект за другим, запоминая позицию, правильно. а максимальная занятая память равна максимальной последовательности символов в файле? максимально занятая память - это объем одного буфера. размер буфера величина переменная, и её по идее можно задать, но она все равно небольшая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2015, 12:29 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, спасибо за ответ, а также за ответы по делу в предыдущих темах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2015, 13:20 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
Ещё вопрос: по-моему, быстрее 1 раз загрузить в файл 1 Гб, чем 1000 раз по 1 Мб. Как загрузить в файл большой vector? Загрузит ли данный код 1 раз 1 Гб или будет загружать 1000 раз по 1 Мб? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 12:30 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
log_hereЕщё вопрос: по-моему, быстрее 1 раз загрузить в файл 1 Гб, чем 1000 раз по 1 МбОптимальный размер блока чтения 32-128 К Байт. А вот ваши попытки натягивать сову на глобус будут череповаты и сове и глобусу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 17:24 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
log_hereЕщё вопрос: по-моему, быстрее 1 раз загрузить в файл 1 Гб, чем 1000 раз по 1 Мб. Всё равно. Код: plaintext log_hereКак загрузить в файл большой vector? Обычно о таком говорят "выгрузить". Путём совершения последовательных записей в этот файл. Для больших объемов важно выводить не каждый элемент вектора отдельно, а пачками по кол-ву элементов, влазящих в один буфер. Можно выводить одной операцией, тогда CRL и операционка это сделают сами, главное -- не выводить каждый элемент отдельно -- их много, поэтому чисто на входах и выходах в функцию потеряется много времени. log_hereЗагрузит ли данный код 1 раз 1 Гб или будет загружать 1000 раз по 1 Мб? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Я тут что-то не понял, тут нет ни гигабайта, ни мегабайта даже. и элементов не 1000, а 5. Если вопрос в том, запишутся ли в файл все слова одной операцией -- ответ "нет, не запишутся". Это по сути просто цикл по элементам, записывающий каждый элемент в поток. Данные каждого элемента расположены в разных участках памяти (каждая строка std::string хранит данные в своём буфере), поэтому код даже теоретически не может быть оптимизирован с выполнения пяти операций вывода с каждым элементом в выполенние одной операции вывода над всеми элементами сразу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 17:54 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
Такой вот код, наоборот, будет выводить данные в файл оптимально, за одну логическую операцию и физически блоками по N килобайт, в соотв. с размерами буферов файловой системы и CRT. Плата за это -- расход памяти размером с этот файл. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 18:09 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, то есть, такой код выгрузит в файл вектор за наилучшее время, блоками по N = 32-128 кБ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 21:39 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
Поправка Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 21:48 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
file mapping для чтения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 06:31 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
Lepsikfile mapping для чтения он только ничего не ускоряет. я честно говоря вообще не понимаю, зачем он нужен в мирной жизни ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 12:12 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
Вопрос зашёл ещё дальше. Как прочесть файл в несколько потоков? Например, есть 4 потока и файл из 4 000 000 000 строк. Надо загрузить по 1 000 000 000 строк в 4 соответствующих массива. Можно ли для ускорения сделать это многопоточно и как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 18:23 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
log_hereВопрос зашёл ещё дальше. Как прочесть файл в несколько потоков? Например, есть 4 потока и файл из 4 000 000 000 строк. Надо загрузить по 1 000 000 000 строк в 4 соответствующих массива. Можно ли для ускорения сделать это многопоточно и как это сделать? Так элементарно, вычитываешь длину файла, разбиваешь его на участки (куски) в соответствии с уровнем параллелизма, читаешь независимо в фоновых потоках, потом сливаешь все результаты в один. Со "строками" сложнее -- не понятно, что такое "строка" и как их делить между потоками на границах участков файла, но в принципе это возможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 18:28 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, В файле элементы разделены Код: plaintext 1. А как прочесть, например, вторую четверть файла? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 18:36 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
MasterZivчитаешь независимо в фоновых потоках, потом сливаешь все результаты в один. Не сработает. Аффтар, обломись, чтение и так будет идти на максимальной для дисковой подсистемы скорости. Попытка распараллелить скорость только уменьшит. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 18:42 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
MasterZivТак элементарно, вычитываешь длину файла, разбиваешь его на участки (куски) в соответствии с уровнем параллелизма, читаешь независимо в фоновых потоках, потом сливаешь все результаты в один. Нет. Головки чтения HDD не распарралелятся. Наоборот, будут больше скакать туда-сюда и будет медленнее. На SSD будет одинаково. С чтением из инета сработает, в два потока качается быстрее чем в один. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 20:31 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovMasterZivчитаешь независимо в фоновых потоках, потом сливаешь все результаты в один. Не сработает. Аффтар, обломись, чтение и так будет идти на максимальной для дисковой подсистемы скорости. Попытка распараллелить скорость только уменьшит. что не увеличит, может быть, а что уменьшит вряд ли. потом, я все же полагал, что данные из файла как-то обрабатываются, а не просто в память складируются. вот если время обработки будет достаточно большим, то паралеливание может дать плоды за счет того, что io будет постоянно загружено , и не будет простаивать. к тому же некоторый уровень параллелизма может быть в подсистеме ввода/вывода, это тоже может дать ускорение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 20:42 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
MasterZivLepsikfile mapping для чтения он только ничего не ускоряет. я честно говоря вообще не понимаю, зачем он нужен в мирной жизни Положительно влияет на скорость карьерного и зарплатного роста для тех кто понимает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 21:50 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
log_hereВопрос зашёл ещё дальше. Как прочесть файл в несколько потоков? Например, есть 4 потока и файл из 4 000 000 000 строк. Надо загрузить по 1 000 000 000 строк в 4 соответствующих массива. Можно ли для ускорения сделать это многопоточно и как это сделать? Этот вопрос достаточно синьорный. Он выходит за рамки обычного школьного программирования или собеседования. Чтобы на него ответить правильно нужно задать встречные вопросы - а что есть ДИСК на котором лежит этот файл? Если это RAID10 массив то параллелить имеет смысл (наверное. Я так думаю.). Eсли это сетевая система хранения типа Clarion где блинов больше чем в обычном системнике то степень параллелизма можно (наверное) еще поднять побольше чем в варианте с RAID. Если это SSD диск то у него (наверное) тоже есть некие свои характеристики. Возможно параллелизм имеет смысл. А для 2.5 дюймового ХДД типа ноутбучного лучше оставить 1 поток (наверное). Во всех случаях мы решаем уравнение где много неизвестных. И сказать сколько надо потоков 1,2,3,4 - очень трудно. Лучше сделать серию экспериментов для нужного КЛАССА системы хранения и записать себе в блокнотик результат и сделать выводы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 23:29 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
log_hereВопрос зашёл ещё дальше. Как прочесть файл в несколько потоков? Например, есть 4 потока и файл из 4 000 000 000 строк. Надо загрузить по 1 000 000 000 строк в 4 соответствующих массива. Можно ли для ускорения сделать это многопоточно и как это сделать?Ох, простихоспаде, в какой форум меня занесло. xD Тут все в принципе просто. Ключом к пониманию, надо ли грузить многопоточно или однопоточно, есть понимание, что является у вас узким местом: процессор или диск. Операция "загрузить" несколько абстрактная, и вполне вероятно что она может подразумевать некоторые действия кроме непосредственно io-операций. Просто так читать в буфер ради чтения смысла нет же, верно? Цель или в память загрузить данные, или сделать над ними какие-то операции, или записать куда, или еще что. На все это нужны процессорное время. Поэтому если ваша дисковая выдает миллиард iops, а вычислять надо много, то имеет смысл параллелить. Если наоборот, то сильно (или вообще) парралелить смысла нет -- чем в большее кол-во потоков сканится файл, тем сильнее последовательное чтение превращается в рандомное, что мало чувствительно для SSD, но особо заметно для обычных дисков, даже если их много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 03:03 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
Dima TС чтением из инета сработает, в два потока качается быстрее чем в один. Это "Ахилесова пята" многих файловых систем. А в целом если хотите /Dimitry Sibiryakov подкалываю/ чтобы Firebird медленно работал, то установите вместе с ним какой-нибудь soft активно использующий hdd. PS: Замерьте время копирование одного файла 50GB и 100000 фалов общим размером 50GB ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 12:05 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
Владимир2012PS: Замерьте время копирование одного файла 50GB и 100000 фалов общим размером 50GB ... Перегнать слона из пункта А в пункт Б и перегнать стаю куриц (общим весом со слона) тем же маршрутом это два разных действия и не надо их сравнивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 20:10 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
Dima Tи не надо их сравнивать Кому как ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2015, 14:54 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
если я правиьно понимаю, ос пишет порциями, поэтому ей все равно,что ей скормили файл целиком.. все равно он будет разбит на буферы.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2015, 14:58 |
|
||
|
Как открываются файлы весом по 1ТБ?
|
|||
|---|---|---|---|
|
#18+
Пример с 10000 файлами неудачен. Возможно Дима хотел сказать другое. Я вижу аналогии с Hadoop. Если ты хочешь что-то ускорить (поиск по файловой системе) сделай так чтобы поисковый массив бился на чанки, зеркалировался по узлам и отдавался процессам отображения и свёртки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2015, 15:11 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39109594&tid=2018717]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 164ms |

| 0 / 0 |
