Самый быстрый способ вставить элементы из хэша Ruby в SQLite 3 - PullRequest
1 голос
/ 15 января 2012

У меня есть хэш Ruby с переменными:

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

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

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

Спасибо

Ответы [ 2 ]

2 голосов
/ 18 января 2012

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

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 голос
/ 15 января 2012

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

...