рельсы большого количества данных в одной записи активной записи выдал - PullRequest
1 голос
/ 17 мая 2010

Итак, я думаю, что около 36000, просто чтобы быть в безопасности, число, которое я не думаю, было бы слишком большим для современной базы данных sql, такой как mysql. Каждая запись имеет только два атрибута.

Итак, я делаю: поэтому я собрал их в одно оператор вставки

sql = "INSERT INTO tasks (attrib_a, attrib_b) VALUES (c1,d1),(c2,d2),(c3,d3)...(c36000,d36000);"

ActiveRecord::Base.connection.execute sql

from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract_adapter.rb:219:in `log'
from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/mysql_adapter.rb:323:in `execute_without_analyzer
from c:/r/projects/vendor/plugins/rails-footnotes/lib/rails-footnotes/notes/queries_note.rb:130:in `execute'
from C:/Ruby/lib/ruby/1.8/benchmark.rb:308:in `realtime'
from c:/r/projects/vendor/plugins/rails-footnotes/lib/rails-footnotes/notes/queries_note.rb:130:in `execute'
from (irb):53
from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/time_or_datetime.rb:242

Я не знаю, достаточно ли вышеуказанной информации, пожалуйста, попросите что-нибудь, что я не предоставил здесь. Так есть идеи, о чем это?

СПАСИБО !!!!

Ответы [ 3 ]

1 голос
/ 17 мая 2010

проблема из-за истечения времени ожидания. У меня была такая же проблема при использовании доктрины ORM. В php мы можем решить эту проблему, изменив время скрипта в файле php.ini. Но я не знаю, как изменить число в рельсах. Может быть, кто-то здесь поможет вам ..

0 голосов
/ 17 мая 2010

Я нашел решение:

Вдохновленный предложением Пимесона, я разделил значения, которые будут включены в одну вставку, в группы по 10 000 человек. поэтому, имея n / 10000 .ceil много вставок.

И это сработало!

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

Best

0 голосов
/ 17 мая 2010

Ну, без дополнительной информации, я бы рискнул предположить, что вы превысили значение max_packet_size для сервера MySQL.

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