只是在這裏大聲思考 - 如果它是在驅動程序批處理支持的問題,您可以嘗試使用單個查詢來實現相同,使批次不那麼重要。 (如你所知,配料是關於避免與多個查詢延遲,但延遲仍是配料單查詢,即使存在。)
這裏是你如何與一個單一的查詢
- 構建實現樂觀更新一個臨時表,其中包含行更新所需的條件,並將更新查詢重寫爲此表上的聯接。 (例如,外部實時數據中的當前時間戳與臨時表中的時間戳結合使用。)如果實時數據上的時間戳未更新,則將從臨時表中選擇該行。
既然您可以使用臨時表作爲選擇查詢,您可以找到哪些行將被更新,然後將其作爲更新查詢提交。 (所有內部事務,當然。)
舉例說明:
TempUpdateTable
---------------
id, // id of the row to be updated
timestamp, // timestamp data originally fetched
data1 // data to be updated
data2
dataN
這給了所有數據的ID進行更新,其中可以儲存,供日後參考
SELECT d.id FROM TempUpdateTable t JOIN YourData d
ON t.id=d.id WHERE t.timestamp=d.timestamp
的然後可以在更新語句中使用相同的查詢
UPDATE YourData
SET data=t.data1
SET data=t.data2 //etc...
FROM TempUpdateTable t WHERE t.id IN
(SELECT d.in FROM TempUpdateTable t JOIN YourData d
ON t.id=d.id WHERE d.timestamp=d.timestamp)