每当有人将股票添加到他们的投资组合中时,我都会使用 activerecord 导入 gem 来导入股票价格历史。在添加股票价格历史之前,该函数首先检查该股票是否已存在于表中。这样,即使 2 个人拥有 Google 股票,它也不会两次填充股票价格历史记录。
但是,这让我想到了并发添加。如果 2 个人同时添加了 Google,并且模型中尚不存在价格历史记录,则“导入”功能将同时出现两次。
这让我想到了我的问题。activerecord-import 是否会锁定表以防止同时进行 2 个导入?
编辑:根据吉姆的建议,我做了以下事情:
在我的 Stock 模型中,我使用 anafter_save
来运行导入 StockHistory 的函数,因此我将 StockHistory 锁定为:
def populatepricehistory
#columns and prices defined here
StockHistory.transaction do
StockHistory.lock
StockHistory.import columns,prices
end