我開發一個的Rails V2.3應用程序,它是一個服務來搜索項目的信息如果項目信息都存儲在數據庫中。新記錄插入到數據庫表在我的情況
有一個在數據庫中的現有projects
表像下:
爲了滿足客戶的需求着想,這表需要午夜的日常生活中插入新的數據。
創建這些新記錄的原因是爲了讓Rails應用程序能夠通過除了全名搜索之外的單個詞搜索項目。
例如,如果單詞「門戶」,既汽車租賃門戶和位置軌跡門戶記錄搜索應由Rails應用程序被發現。 這就是應用程序的數據庫需要有來自project_name
的每個單詞的所有記錄。
所以,我的計劃是產生這些新的記錄在project_name
列劈裂值(以上projects
表)爲單個單詞然後使用每一個字爲新紀錄的project_name
,同時保持記錄的其他列不變。
例如,在上面的表格中,第一條記錄有project_name
「汽車租賃門戶」,我會做的就是這個字符串分割成3個字和建立以下三個新記錄什麼要插入到表:
實現這一目標。我試圖製作一個rake任務,它從原始projects
表中獲取所有記錄,並且對於每個記錄,rake任務將字符串值project_name
列拆分爲單詞,然後構建帶有單詞的新記錄並插入到表。我rake任務看起來像下面的代碼:
all_records = ActiveRecord::Base.execute("select * from projects;")
all_records.each do |record|
user_id = record[0]
project_name=record[1]
department = record[2]
other = record[3]
words=project_name.split()
words.each do |word|
sql = "insert into project values (#{user_id},#{word},#{department},#{other});"
ActiveRecord::Base.execute(sql)
end
end
rake任務運行良好,它創建了預期的新記錄,並插入到projects
表,但的問題是它需要36小時完成!
這是可以理解的,因爲原點表非常大,如果將字符串拆分爲單詞並創建新記錄就像創建3倍大的表(假設每個字符串project_name
有3個單詞)。
我的問題:
可能一些Rails的專家建議我一些更有效的方式來實現我上述的新記錄插入的事情嗎?
或者任何新的方法來啓用單詞搜索在我的情況? (這是不使用我設計爲數據庫中的每個單字專賣店的方式。)
嗨,項目表實際上沒有映射到項目中的任何模型對象。其實所有的名字都是假的,與真實的項目相比。這是沒有模型映射到表。 – Mellon
。 。 。所以只需定義一個模型來簡化耙子任務。有關示例,請參閱我的編輯。 – klochner
有沒有對我的文章中的設計比它快多少的粗略估計?快2,3倍? – Mellon