Анализ данных с использованием R / Python и SSD - PullRequest
12 голосов
/ 24 ноября 2010

Есть ли у кого-нибудь опыт использования r / python с данными, хранящимися на твердотельных накопителях. Если вы в основном читаете, то теоретически это должно значительно улучшить время загрузки больших наборов данных. Я хочу выяснить, так ли это, и стоит ли вкладывать средства в твердотельные накопители для повышения скорости ввода-вывода в приложениях с интенсивным использованием данных.

Ответы [ 5 ]

19 голосов
/ 24 ноября 2010

Мои 2 цента: SSD окупается, только если на нем хранятся ваши приложения, а не ваши данные. И даже тогда, только если необходим большой доступ к диску, как для ОС. Люди правы, чтобы указать вам на профилирование. Без этого я могу сказать, что почти все время чтения уходит на обработку, а не на чтение на диске.

Лучше думать о формате ваших данных, а не о том, где они хранятся. Ускорение чтения ваших данных может быть достигнуто с помощью правильных приложений и правильного формата. Как использовать внутренний формат R вместо того, чтобы возиться с текстовыми файлами. Сделайте это восклицательным знаком: никогда не продолжайте возиться с текстовыми файлами. Идите бинарно, если вам нужна скорость.

Из-за накладных расходов, как правило, не имеет значения, если у вас есть SSD или обычный диск для чтения ваших данных. У меня есть оба, и я использую обычный диск для всех моих данных. Я иногда работаю с большими наборами данных, и у меня никогда не возникало с этим проблем. Конечно, если мне придется идти очень тяжело, я просто работаю на наших серверах.

Так что это может иметь значение, когда мы говорим о концертах и ​​концертах данных, но даже тогда я очень сомневаюсь, что доступ к диску является ограничивающим фактором. Если только вы постоянно не читаете и не записываете на диск, но тогда я бы сказал, что вы должны снова начать думать о том, что именно вы делаете. Вместо того, чтобы тратить эти деньги на SDD-диски, лучше использовать дополнительную память. Или просто убедите босса найти вам достойный сервер вычислений.

Временной эксперимент с использованием фиктивного фрейма данных, а также чтение и запись в текстовом формате в двоичном формате на SSD-диске или на обычном диске.

> tt <- 100
> longtext <- paste(rep("dqsdgfmqslkfdjiehsmlsdfkjqsefr",1000),collapse="")
> test <- data.frame(
+     X1=rep(letters,tt),
+     X2=rep(1:26,tt),
+     X3=rep(longtext,26*tt)
+ )

> SSD <- "C:/Temp" # My ssd disk with my 2 operating systems on it.
> normal <- "F:/Temp" # My normal disk, I use for data

> # Write text 
> system.time(write.table(test,file=paste(SSD,"test.txt",sep="/")))
   user  system elapsed 
   5.66    0.50    6.24 

> system.time(write.table(test,file=paste(normal,"test.txt",sep="/")))
   user  system elapsed 
   5.68    0.39    6.08 

> # Write binary
> system.time(save(test,file=paste(SSD,"test.RData",sep="/")))
   user  system elapsed 
      0       0       0 

> system.time(save(test,file=paste(normal,"test.RData",sep="/")))
   user  system elapsed 
      0       0       0 

> # Read text 
> system.time(read.table(file=paste(SSD,"test.txt",sep="/"),header=T))
   user  system elapsed 
   8.57    0.05    8.61 

> system.time(read.table(file=paste(normal,"test.txt",sep="/"),header=T))
   user  system elapsed 
   8.53    0.09    8.63 

> # Read binary
> system.time(load(file=paste(SSD,"test.RData",sep="/")))
   user  system elapsed 
      0       0       0 

> system.time(load(file=paste(normal,"test.RData",sep="/")))
   user  system elapsed 
      0       0       0 
6 голосов
/ 24 ноября 2010

http://www.codinghorror.com/blog/2010/09/revisiting-solid-state-hard-drives.html имеет хорошую статью о твердотельных накопителях, комментарии предлагают много полезных идей.

Зависит от типа выполняемого вами анализа, будь то привязка к процессору или ввод-вывод.Личный опыт, связанный с регрессионным моделированием, говорит мне, что прежний чаще встречается, тогда твердотельные накопители вряд ли пригодятся.

Короче говоря, лучше всего сначала профилировать приложение.

4 голосов
/ 04 июня 2012

Извините, но я не согласен с наиболее оцененным ответом @joris.Это правда, что если вы запускаете этот код, двоичная версия почти не тратит время на написание.Но это потому, что набор тестов странный.Большой столбец «длинный текст» одинаков для всех строк.Фреймы данных в R достаточно умны, чтобы не хранить повторяющиеся значения более одного раза (через факторы).

Итак, в конце мы заканчиваем текстовым файлом размером 700 МБ по сравнению с двоичным файлом размером 335 КБ (конечно, двоичный файл - это намногобыстрее xD)

-rw-r--r-- 1 carlos carlos 335K Jun  4 08:46 test.RData
-rw-rw-r-- 1 carlos carlos 745M Jun  4 08:46 test.txt

Однако, если мы попробуем со случайными данными

> longtext<-paste(sample(c(0:9, letters, LETTERS),1000*nchar('dqsdgfmqslkfdjiehsmlsdfkjqsefr'), replace=TRUE),collapse="")
> test$X3<-rep(longtext,26*tt)
> 
> system.time(write.table(test,file='test.txt'))
   user  system elapsed 
  2.119   0.476   4.723 
> system.time(save(test,file='test.RData'))
   user  system elapsed 
  0.229   0.879   3.069 

и файлы не будут такими разными

-rw-r--r-- 1 carlos carlos 745M Jun  4 08:52 test.RData
-rw-rw-r-- 1 carlos carlos 745M Jun  4 08:52 test.txt

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

НО всегда есть точка, где диск становится узким местом.Мой тест проводился на исследовательском сервере, где с помощью решения NAS мы получаем время чтения / записи диска более 600 МБ / с.Если вы сделаете то же самое на своем ноутбуке, где скорость выше 50 МБ / с, вы заметите разницу.

Итак, если вам действительно приходится иметь дело с реальными bigData (и повторять миллион раз одну и ту же строку из тысячи символов, это не большие данные), когда двоичный дамп данных превышает 1 ГБ, вы оценитехороший диск (SSD - хороший выбор) для чтения входных данных и записи результатов обратно на диск.

2 голосов
/ 24 ноября 2010

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

Я бы настоятельно рекомендовалсначала вы профилируете свой код и рассмотрите возможность использования альтернативных библиотек (например, numpy), чтобы увидеть, какие улучшения вы можете получить, прежде чем инвестировать в оборудование.

0 голосов
/ 24 ноября 2010

Время чтения и записи для твердотельных накопителей значительно выше, чем у стандартных дисков со скоростью 7200 об / мин (оно все еще стоит с диском со скоростью 10 тыс. Об / мин, но не уверен, насколько оно лучше, чем 15 тыс.).Так что да, вы получите гораздо более быстрые времена при доступе к данным.

Повышение производительности не вызывает сомнений.Тогда это вопрос экономики.Диски со скоростью 2 ТБ 7200 об / мин стоят 170 долларов за штуку, а 100 ГБ SSDS - 210 долларов.Поэтому, если у вас много данных, вы можете столкнуться с проблемой.

Если вы читаете / записываете много данных, приобретите SSD.Однако, если приложение сильно загружает процессор, вы получите гораздо большую выгоду от приобретения лучшего процессора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...