我有一個自動生成的主鍵和DateTime字段的表。我們有幾個客戶端插入記錄,使用來自客戶端計算機的日期/時間(即它不是真正的「TimeStamp」字段)。當記錄按主鍵進行排序時,我一直在使用大量日期/時間爲小時的情況。起初,我認爲客戶端計算機時鐘已關閉。但越來越多的人認爲它可能是某種數據庫的緩存機制。oracle是否可以配置爲緩存插入?
有什麼可以解釋這個嗎?
我有一個自動生成的主鍵和DateTime字段的表。我們有幾個客戶端插入記錄,使用來自客戶端計算機的日期/時間(即它不是真正的「TimeStamp」字段)。當記錄按主鍵進行排序時,我一直在使用大量日期/時間爲小時的情況。起初,我認爲客戶端計算機時鐘已關閉。但越來越多的人認爲它可能是某種數據庫的緩存機制。oracle是否可以配置爲緩存插入?
有什麼可以解釋這個嗎?
Oracle不會緩存插入或更新:當DML語句完成時,這意味着更改已完成。當你承諾他們是永久的。
但是,Oracle可以緩存標識符的生成。如果您的主鍵由序列生成,默認情況下,Oracle將緩存20個密鑰,並且不保證密鑰將按照它們被詢問的順序進行分配。
使用ORDER
關鍵字:
[...]保障號碼的請求順序生成的序列。如果您使用序號作爲時間戳,則此子句很有用。對於用於生成主鍵的序列,保證順序通常不重要。
例子:
CREATE SEQUENCE your_sequence ORDER
當然這是假設所有的刀片也使用SYSTIMESTAMP
或SYSDATE
,如果他們使用客戶端日期設定,甲骨文已經沒有辦法訂購的刀片。
最終,它真的很重要嗎?對於大多數應用程序來說,只有unicity很重要,而且一個自動增量字段可以被一個GUID替代。特別是因爲你已經有了一個時間戳列。
我們有一些查詢新記錄的服務。我們正在爲此使用主鍵值。我不一定使用主鍵作爲時間戳,但只是爲了確保它們是有序的,並且我正在考慮所有記錄。如果我的客戶端生成的「時間戳」關閉了幾秒鐘,那就好了。所以在創建我的序列時只需簡單地添加「ORDER」保證記錄將按順序插入? –
這將保證如果Alice在Bob之前要求一個id(有'sequence.nextval'),那麼'idA