我正在研究使用 datavault 2.0 方法。我了解散列并尝试应用它的原因。我想在数据库的“暂存”阶段应用它,而不是将其加载到 DV 中。
如果表中有业务键,那么很容易将其应用到该表(可能成为集线器)。但是有像“orderdetail”这样的表(可能成为链接),它们通过代理键多次引用其他元素。
临时表是否应该同时包含每个外键的代理序列以及引用实体 BK 的散列?
示例:如果我有一个带有 customerId 代理序列的订单表,但客户表有一个用作 BK 的 CUST-000xxx 引用,我是否应该在订单和客户之间执行“连接”以解析“CUST-000xxx”所以我可以散列它并将其包含在订单临时表中?
我在想,当从暂存区加载 DV 中的数据时,这可能会解决,但是在那个特定时刻,暂存区中可能不存在客户参考,因为订单可能只是一个新订单没有改变的现有客户。
DV 2.0 规定,所有使用哈希的业务都是为了提高性能并简单地并行加载数据,而无需在 DV 本身中进行昂贵的查找。因此,这个问题通常是如何解决的。
在此处添加示例:
订单 - orderid - customerid - order_ref - salespersonid
客户 - customerid - customer_ref
人 - 人名 - 全名 - 登录
为了填充订单,我应该像这样在源数据库中加入:
SELECT
hash_func(o.order_ref) as hash_key_order,
hash_func(c.customer_ref) as hash_key_customer,
hash_func(p.login) as hash_key_person,
o.orderid,
c.customerid,
p.login
FROM
order o inner join customer c on o.customerid = c.customerid
inner join person p on o.salespersonid = p.personid
或者是在 datavault 中解析的外键解析,因此查询更简单,例如:
SELECT
hash_func(o.order_ref) as hash_key_order,
o.orderid,
c.customerid,
p.personid
FROM
order o
这对我来说不是很清楚。我的理解是,通过散列避免了昂贵的查找,因此不为外键在暂存时生成散列对性能没有贡献?