Действительно ли это возможно к Python ускорения IO?

Полагаю, вы должны добавить условия как

SELECT NIH.NewItemHeaderId,NIH.TPSPStatus AS 'Header Status', 
NIR.NewItemRequestId,NIR.Status AS RequesStatus
FROM NewItemHeader NIH
LEFT JOIN NewItemRequest NIR ON NIR.NewItemHeaderId = NIH.NewItemHeaderId
WHERE NIH.TPSPStatus = 'MRD - Standardizer Pending' 
AND NIR.Status = 'MRD - Standardizer Pending' 
.
12
задан Community 23 May 2017 в 11:44
поделиться

8 ответов

Скорость чтения с диска не может быть выше максимальной.

Для достижения максимальной скорости диска вы можете воспользоваться двумя следующими советами:

  1. Прочтите файл в с большим буфером. Это можно закодировать «вручную» или просто с помощью io.BufferedReader (доступен в python2.6 +).
  2. Выполняйте подсчет новой строки в другом потоке, параллельно.
4
ответ дан 2 December 2019 в 04:17
поделиться

Throw hardware at the problem.

As gs pointed out, your bottleneck is the hard disk transfer rate. So, no you can't use a better algorithm to improve your time, but you can buy a faster hard drive.

Edit: Another good point by gs; you could also use a RAID configuration to improve your speed. This can be done either with hardware or software (e.g. OS X, Linux, Windows Server, etc).


Governing Equation

(Amount to transfer) / (transfer rate) = (time to transfer)

(6000 MB) / (60 MB/s) = 100 seconds

(6000 MB) / (125 MB/s) = 48 seconds


Hardware Solutions

The ioDrive Duo is supposedly the fastest solution for a corporate setting, and "will be available in April 2009".

Or you could check out the WD Velociraptor hard drive (10,000 rpm).

Also, I hear the Seagate Cheetah is a good option (15,000 rpm with sustained 125MB/s transfer rate).

12
ответ дан 2 December 2019 в 04:17
поделиться

Если вы предполагаете, что диск может читать со скоростью 60 МБ / с, вы d нужно 6000/60 = 100 секунд, что составляет 1 минуту 40 секунд. Я не думаю, что вы можете стать быстрее, потому что диск является узким местом.

4
ответ дан 2 December 2019 в 04:17
поделиться

обычное «нет».

Вы почти достигли максимальной скорости диска.

Я имею в виду, вы можете mmap файл или прочитать его в двоичные фрагменты и используйте .count ('\ n') или что-то в этом роде. Но вряд ли это даст серьезные улучшения.

5
ответ дан 2 December 2019 в 04:17
поделиться

как говорили другие - «нет»

Почти все ваше время тратится на ожидание ввода-вывода. Если это что-то, что вам нужно сделать более одного раза, и у вас есть машина с тоннами оперативной памяти, вы можете сохранить файл в памяти. Если на вашем компьютере 16 ГБ оперативной памяти, у вас будет 8 ГБ в каталоге / dev / shm для игры.

Другой вариант: Если у вас несколько компьютеров, распараллелить эту проблему несложно. Разделите его между несколькими машинами, каждая из них считает свои символы новой строки и сложит результаты.

1
ответ дан 2 December 2019 в 04:17
поделиться

Обратите внимание, что ввод-вывод Python реализован на C, поэтому здесь не так много удачи в ускорении.

0
ответ дан 2 December 2019 в 04:17
поделиться

Уловка заключается не в том, чтобы заставить электроны двигаться быстрее (это сложно сделать), а в том, чтобы выполнить больше работы. за единицу времени.

Во-первых, убедитесь, что чтение вашего файла размером 6 ГБ связано с вводом-выводом, а не с ЦП.

Если это ограничение ввода-вывода, рассмотрите шаблон проектирования «Fan-Out».

  • A родительский процесс порождает группу потомков.

  • Родитель читает файл размером 6 Гб и передает строки потомкам, записывая в их каналы STDIN. Время чтения 6 ГБ останется постоянным. Обработка строк должна включать как можно меньше родительской обработки. Следует использовать очень простые фильтры или счетчики.

    Канал - это канал в памяти для связи. Это' общий буфер sa с устройством чтения и записи.

  • Каждый дочерний элемент считывает строку из STDIN и выполняет соответствующую работу. Каждый ребенок, вероятно, должен написать простой дисковый файл с окончательными (суммированными, сокращенными) результатами. Позже результаты в этих файлах могут быть объединены.

8
ответ дан 2 December 2019 в 04:17
поделиться

2 minutes sounds about right to read an entire 6gb file. Theres not really much you can do to the algorithm or the OS to speed things up. I think you have two options:

  1. Throw money at the problem and get better hardware. Probably the best option if this project is for your job.

  2. Don't read the entire file. I don't know what your are trying to do with the data, so maybe you don't have any option but to read the whole thing. On the other hand if you are scanning the whole file for one particular thing, then maybe putting some metadata in there at the start would be helpful.

1
ответ дан 2 December 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: