簡體   English   中英

rails-數據庫分片

[英]rails - database sharding

我有以下代碼將數據從數據庫A(shard_A)中的圖像表復制到數據庫B(shard_B)中的另一個表

這是兩個數據庫中圖像表的結構

Image table (shard_A)   -   Image table (shard_B)
- image_id              -   image_id 
- submission_fk         -   sub_fk 
- image_desc            -   img_desc

2個表的列名略有不同

  @test_shard_A = Image.using(:shard_A).find(:first, :conditions => ["submission_fk =?", @sub.id ])

  Octopus.using(:shard_B) do

    Image.create(
    :image_id => @test_shard_A.image_id,
    :sub_fk => @test_shard_A.submission_fk,
    :img_desc => @test_shard_A.image_desc
    ) do |primary|
    primary.img_id = @test_shard_A.image_id
    end

  end

上面給了我以下錯誤信息:

unknown attribute: sub_fk

我究竟做錯了什么?

當對表執行第一個查詢時,ActiveRecord會加載元數據(表信息)。 當您通過對shard_A的查詢啟動應用程序時,它將檢查表結構,並使用submitt_fk根據其構造Image類。

當您更改分片時,它不會再次檢查表結構,因此它假定存在一個submit_fk,並且假定不存在sub_fk,因為它對此一無所知。

我建議您對所有分片使用相同的結構,但是,如果不能這樣做,則可以強制ActiveRecord 重新加載表信息 -我從未使用過Octopus,但我認為它將起作用:

Image.reset_column_information

請注意,這將降低應用程序的性能,因為重新加載元數據是一項緩慢的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM