Я использую Rails 3.1.0 и Ruby 1.9.2 с PostgreSQL. Я хочу получить данные из огромных файлов (~ 300 МБ) и поместить их в базу данных.
Здесь я использую транзакцию:
File.open("./public/data_to_parse/movies/movies.list").each do |line|
if line.match(/\t/)
title = line.scan(/^[^\t(]+/)[0]
title = title.strip if title
year = line.scan(/[^\t]+$/)[0]
year = year.strip if year
movie = Movie.find_or_create(title, year)
temp.push(movie) if movie
if temp.size == 10000
Movie.transaction do
temp.each { |t| t.save }
end
temp =[]
end
end
end
Но я хочу улучшить производительность, используя массовую вставку с сырым SQL:
temp.push"(\'#{title}\', \'#{year}\')" if movie
if temp.size == 10000
sql = "INSERT INTO movies (title, year) VALUES #{temp.join(", ")}"
Movie.connection.execute(sql)
temp =[]
end
end
Но у меня есть эта ошибка "несовместимые кодировки символов: ASCII-8BIT и UTF-8". Когда я использую activerecord, все нормально.
Файлы содержат символы, такие как немецкие умлауты. Я попробовал все отсюда Rails 3 - (несовместимые кодировки символов: UTF-8 и ASCII-8BIT): , но это мне не помогает.
У вас есть идеи, откуда это происходит?
Спасибо