您的考慮可能不僅僅是匹配的吞吐量。例如,您需要維護規則。
但是,讓我們假設一組靜態規則和消息,其中包含滿足所有規則所需的所有字段。使用SQL,結構將以message
表開始。該表格將具有insert
觸發器。插入觸發器將負責匹配規則。做這個的最好方式是什麼?
即使每個匹配都是單線程的,每秒處理超過10條消息,處理過程本質上也是並行的。我不知道你需要多少努力才能平行比賽。數據庫中的並行性通常在SQL語句中,而不是在它們之間。
有各種解決方案。例如,您可以將規則編碼爲巨型存儲過程中的代碼。這將是一場噩夢,可能會超過存儲過程的長度限制,並且可能會非常緩慢。
另一個瘋狂的想法。將規則的匹配消息存儲在表中,用於該規則,並且具有約束條件僅加載匹配的規則。你的過程看起來像是一個zillion插入語句。
更嚴重的是,你會進一步走代碼,如:
select *
from rules
where . . .
的結果集將有匹配規則。該where
條款可能是這樣的:
select *
from rules r
where @wordcount > coalesce(r.wordcount, 0) and
@topic = coalesce(r.topic, @topic) and
. . .
也就是說,所有的規則每一個可能的比較將是where
子句。而且,這些規則將被預先處理以確定他們需要哪些條款。
你甚至可以與外部變量分配,並直接訪問查詢:
select *
from rules r cross join inserted i
where i.wordcount > coalesce(r.wordcount, 0) and
i.topic = coalesce(r.topic, @topic) and
. . .
所以,是的,這是SQL可行的。而且,您可以並行進行匹配。你只需要做一些工作,讓你的規則適合數據庫比較的格式。
SQL通常用於關係數據庫。這個系統中的關係數據庫在哪裏? –
哪些規則存儲,由用戶定義? – sourcecode
每條消息是否包含解決任何/所有規則所需的所有字段? –