同步處理子字串索引
子字串索引中的資料必須進行同步處理,因為會對來源屬性進行變更。建立新物件 (插入)、修改現有物件的屬性 (更新) 或刪除物件 (移除) 等操作需要更新至子字串索引中的資料。
下列選項適用於將子字串索引及其來源屬性進行同步處理:
• 事件驅動同步處理
• 排程背景佇列處理
• 手動同步處理
您可以針對子字串索引使用不同的同步處理方法。每個個別子字串索引與操作類型 (插入、更新或移除) 都可以針對同步處理進行單獨配置。例如,事件處理可用於插入及更新操作,而背景佇列處理可用於移除操作。
事件驅動同步處理
事件驅動同步處理可能會在插入、更新或移除事件時發生。啟用後,會在與原始操作相同的交易中,將來源屬性同步處理至子字串索引。變更會立即反映在使用子字串索引的任何查詢中。此選項的缺點是會增加操作的額外處理時間。
事件驅動同步處理可使用
組態檔中的
synchronizeOnInsert、
synchronizeOnRemove 與
synchronizeOnUpdate 屬性進行配置。預設會禁用此同步處理選項。
排程背景佇列處理同步處理
在將同步處理配置為使用排程背景佇列處理後,排程佇列會根據組態檔定期執行。排程佇列處理可決定應在此時段執行的子字串索引與操作類型。單獨的處理佇列可用來執行這些個別任務。針對插入與更新操作,可以處理整個來源表,或者只能處理最近的變更 (自從上次處理後的變更)。針對移除操作,只能處理整個子字串索引。
排程背景佇列處理同步處理可使用在
組態檔中指定的時段內容 (
synchronizationSchedulePeriod) 與間隔內容 (
scheduleSynchronizeFullInsertInterval、
scheduleSynchronizeFullRemoveInterval、
scheduleSynchronizeFullUpdateInterval、
scheduleSynchronizeRecentInsertInterval 與
scheduleSynchronizeRecentUpdateInterval) 來配置。
配置的時段與間隔內容一起決定同步處理的發生頻率。例如,10 秒的時段與 30 秒的間隔會產生每 300 秒一次的同步處理頻率。小於零的間隔值絕不會使用佇列處理來同步處理。等於零的間隔值只會在應用伺服器啟動時同步處理一次。
基於子字串索引處理次數,排程背景佇列處理不會對針對來源物件執行的操作造成任何影響。在對來源物件的操作與子字串索引同步處理之間存在延遲。因此,在此延遲視窗內執行的查詢可能與來源物件的目前狀態不一致。
手動同步處理
手動同步處理可使用 sync 操作與 subStringIndexTool 執行。此操作可針對指定的子字串索引,在應用伺服器中立即執行完整的同步處理。