Siddhi 使用数据库中的数据加入事件
Siddhi join events with data from DB
我想了解 siddhi 中的 "dos" 和 "dont dos"。我看到了数据库连接器和使用来自数据库的数据丰富流事件的可能性(比如 cassandra 连接器)。
例子:
@primaryKey('id')
@store(type = 'rdbms', datasource = 'WSO2_TEST_DB')
define table BuyerInfoTable (id string, name string, address string, email string);
@info(name = 'EnrichBuyerInformation')
from ShipmentInfoStream as s join BuyerInfoTable as b
on s.buyerId == b.id
select s.orderId, b.name, b.address, b.email, s.shipmentType
insert into ShipmentAndBuyerInfoStream;
我的理解是否正确,这种方法意味着 select 对 ShipmentInfoStream 上的每个传入事件的数据库进行查询?
如果是 - 这对我来说听起来像是 "dont do" - 特别是如果我们谈论的是 10 万个事件/秒。
还是我对架构的理解有误?
是的,你是对的。根据上述查询,当有事件到达 ShipmentInfoStream 时,将进行 DB 查询,获取输出并进一步处理。
但是,可以通过多种方式改进此操作。
如果数据库 table 只包含有限的值(并且没有被外部用户更改)那么你可以 pre-load 这些事件,保留在 in-memory 事件中存储和处理它们。
您可以使用缓存来提高性能。检查 https://siddhi.io/en/next/docs/query-guide/#store 中的 "Caching In Memory" 部分 ...
我想了解 siddhi 中的 "dos" 和 "dont dos"。我看到了数据库连接器和使用来自数据库的数据丰富流事件的可能性(比如 cassandra 连接器)。
例子:
@primaryKey('id')
@store(type = 'rdbms', datasource = 'WSO2_TEST_DB')
define table BuyerInfoTable (id string, name string, address string, email string);
@info(name = 'EnrichBuyerInformation')
from ShipmentInfoStream as s join BuyerInfoTable as b
on s.buyerId == b.id
select s.orderId, b.name, b.address, b.email, s.shipmentType
insert into ShipmentAndBuyerInfoStream;
我的理解是否正确,这种方法意味着 select 对 ShipmentInfoStream 上的每个传入事件的数据库进行查询? 如果是 - 这对我来说听起来像是 "dont do" - 特别是如果我们谈论的是 10 万个事件/秒。
还是我对架构的理解有误?
是的,你是对的。根据上述查询,当有事件到达 ShipmentInfoStream 时,将进行 DB 查询,获取输出并进一步处理。
但是,可以通过多种方式改进此操作。
如果数据库 table 只包含有限的值(并且没有被外部用户更改)那么你可以 pre-load 这些事件,保留在 in-memory 事件中存储和处理它们。
您可以使用缓存来提高性能。检查 https://siddhi.io/en/next/docs/query-guide/#store 中的 "Caching In Memory" 部分 ...