首页 > 解决方案 > ignite cache 和 postgres 作为 3rd 方数据库的不同查询结果(ignite cache 查询的空结果集)

问题描述

我目前正在尝试将 ignite 数据库作为 postgres 数据库之上的内存中的缓存。postgres 数据库中的数据基本上是按照 tpc-h 模式生成的数据。将数据插入 postgres 后,我将数据加载到 ignite 缓存中。根据对 ignite 缓存和 postgres 的一些 count(*) 查询,来自 postgres 的每一行都存在于 ignite 缓存中。那是给定的情况。现在我假设对 postgres 的查询与对 ignite 缓存的查询给出相同的结果。我的查询并非如此。

这是 postgres 查询:

SELECT l_orderkey, SUM(l_extendedprice * ( 1 - l_discount )) AS revenue, o_orderdate, o_shippriority FROM customer, orders, lineitem WHERE c_mktsegment = 'BUILDING' AND c_custkey = o_custkey AND l_orderkey = o_orderkey AND o_orderdate < DATE '1998-06-01' AND l_shipdate > DATE '1998-06-01' GROUP BY l_orderkey, o_orderdate, o_shippriority ORDER BY revenue DESC, o_orderdate LIMIT 10;";

这是点燃查询:

SELECT l_orderkey, SUM(l_extendedprice * ( 1 - l_discount )) AS revenue, o_orderdate, o_shippriority FROM "CustomerCache".customer, "OrdersCache".orders, "LineitemCache".lineitem WHERE c_mktsegment = 'BUILDING' AND c_custkey = o_custkey AND l_orderkey = o_orderkey AND o_orderdate < DATE '1998-06-01' AND l_shipdate > DATE '1998-06-01' GROUP BY l_orderkey, o_orderdate, o_shippriority ORDER BY revenue DESC, o_orderdate LIMIT 10;";

正如您在上面看到的,查询几乎相同。只有“FROM”部分不同。这必须是这样的,因为 ignite 缓存需要通过以下方式寻址: "CACHENAME".TABLENAME 。

点燃结果:

点燃结果

Postgres结果:

Postgres 结果

点燃缓存不返回任何结果。postgres 返回预期结果。这怎么可能?提醒一下:完整的数据已加载到 ignite 缓存中。当我计算 chached 表中的行数时,它们与 postgres 表中的行数一样多。问题:为什么 ignite 不能为上面的查询返回正确的结果。

Ignite 由部署在 GKE 集群中的两个节点组成。Ignite 配置如下所示:NODE-CONFIGURATION.XML

通过将 ignite 客户端部署到集群,数据从 postgres 加载到缓存。此客户端在每个缓存上运行 java 函数IgniteCache.#loadCache() 。

标签: sqlpostgresqlcachingignite

解决方案


关于缓存配置,空结果集不是问题。这是关于数据集的问题。我们在某些字段中有尾随空格。执行将字段与 = 而不是 LIKE 进行比较的查询只能在没有尾随空格的情况下工作;)


推荐阅读