点燃缓存和 postgres 作为第 3 方数据库的不同查询结果(点燃缓存查询的空结果集)
Different query results for ignite cache and postgres as a 3rd party database (empty result set for ignite cache queries)
我目前正在尝试将 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 结果:
ignite 缓存没有 return 任何结果。 postgres returns 的预期结果。这怎么可能?提醒一下:完整的数据已加载到 ignite 缓存中。当我计算 chached 表中的行数时,它们与 postgres 表中的行一样多。问题:为什么 ignite 没有为上面的查询返回正确的结果。
Ignite 由部署在 GKE 集群中的两个节点组成。 Ignite 配置如下所示:NODE-CONFIGURATION.XML
通过将 ignite 客户端部署到集群,数据从 postgres 加载到缓存。此客户端在每个缓存上运行 java 函数 IgniteCache.#loadCache()。
关于缓存配置,空结果集不是问题。这是关于数据集的问题。我们在某些字段中有尾随空格。执行将字段与 = 而不是 LIKE 进行比较的查询仅在没有尾随空格的情况下有效;)
我目前正在尝试将 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 结果:
ignite 缓存没有 return 任何结果。 postgres returns 的预期结果。这怎么可能?提醒一下:完整的数据已加载到 ignite 缓存中。当我计算 chached 表中的行数时,它们与 postgres 表中的行一样多。问题:为什么 ignite 没有为上面的查询返回正确的结果。
Ignite 由部署在 GKE 集群中的两个节点组成。 Ignite 配置如下所示:NODE-CONFIGURATION.XML
通过将 ignite 客户端部署到集群,数据从 postgres 加载到缓存。此客户端在每个缓存上运行 java 函数 IgniteCache.#loadCache()。
关于缓存配置,空结果集不是问题。这是关于数据集的问题。我们在某些字段中有尾随空格。执行将字段与 = 而不是 LIKE 进行比较的查询仅在没有尾随空格的情况下有效;)