2012-01-15 2 views
1

У меня есть хэш рубиновый с переменными:быстрый способ вставки элементов из Ruby-хэш, чтобы SQLite 3

  • двухэлементная массив строк
  • целое

Я попытался следующие два способа вставки элементов из хэша в SQLite 3 DB:

myRubyHash.each do |k, v| 
    x=[k[0],k[1],v] 
    db.execute "INSERT INTO MyTable VALUES (?, ?, ?)", x 
end 

И

myRubyHash.each do |x| 
    db.execute "INSERT INTO MyTable VALUES (?, ?, ?)", x 
end 

Первый из них значительно быстрее (но все еще довольно медленный). Есть ли более быстрый способ сделать это?

Если это помогает, моя таблица SQLite 3 была создана:

rows = db.execute <<-SQL 
    CREATE TABLE Assoc_words_p (
    name1 varchar(30), 
    name2 varchar(30), 
    val int, 
    PRIMARY KEY (name1,name2) 
); 
SQL 

Благодаря

+0

Вместо того, чтобы спросить нас, который является самым быстрым, взять время, чтобы научиться использовать 'Benchmark'. Он поставляется с Ruby и предназначен для быстрого определения самых быстрых способов сделать что-то. –

ответ

2

Я нашел подготовить заявление может быть использовано следующим образом:

stmnt1 = db.prepare("INSERT INTO Table(name1,name2,val) VALUES (?, ?, ?)") 
myRubyHash.each do |k, v| 
    stmnt1.execute(k[0],k[1],v/2) 
end 
1

К сожалению, Hash#each просто не быстрый метод, и я ожидаю, что это то, что вызывает озабоченность производительности. Первое, что приходит в голову с точки зрения производительности, - это понять, почему там вообще есть хэш - кажется, что более быстрый способ - разместить ваши данные в базе данных напрямую и вообще пропустить хэш.

Смежные вопросы