问题标签 [composite-index]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
53 浏览

java - 创建具有复合哈希索引搜索功能的自定义 HashMap 类

我想创建一个HashMap可以通过仅查看用于为每个映射键创建哈希的第一个属性来快速找到映射值的实现。我希望其工作方式类似于在数据库查询的 WHERE 子句中仅使用 的第一个字段时如何MySQL使用 acomposite B-tree index来查找所有匹配的行。composite B-tree index这听起来很复杂,所以让我解释一下。

可以说我有以下课程:

}

我有以下HashMap几个条目:

requestCountMap.get(new ApiRequest("212.54.111.23", "/api/users"))当一个新请求进来时,我可以通过调用例如快速找到给定 ip 到给定 api 端点的先前请求的总数。

现在假设我想找到ApiRequestip address 的所有条目"212.54.111.23"。我可以通过这样的stream()操作来做到这一点:

但这需要遍历每个EntrySet元素。我想做的是创建一个新的HashMap实现,它有一种方法可以根据匹配的clientIpAddress属性值快速找到所有条目。composite hash index该方法将通过使用也可以在MySQL数据库中使用的类似搜索方法来做到这一点。

所以HashMap实现必须能够创建一个composite B-tree index基于两个字段的,并且它还必须能够使用它composite B-tree index来快速找到基于匹配的所有条目clientIpAddress。生成方法将composite B-tree index代替该类现在使用的标准Objects.hash(getClientIpAddress(), getEndPoint());方法。ApiRequest

我已经找到了一个解释 HashMap 工作原理的网页。但是我找不到一个网站来解释如何MySQL使用 a 的第一部分来composite B-tree index快速找到使用.composite B-tree indexWHERE clause

所以我的第一个问题是;当 WHERE 子句中只使用一个字段比较时,MySQL 如何使用复合 B 树索引来查找行?

我的第二个问题是:我可以使用composite B-tree index哈希索引而不是使用生成的常规哈希Objects.hash(getClientIpAddress(), getEndPoint());吗?

我问第二个问题是因为get()扩展HashMap超类的默认方法仍然需要在自定义HashMap实现中工作。

谢谢

编辑:Thomas Kläger 在评论中指出a的第一部分hash index不能用于单字段过滤。这只能通过 B 树索引实现。我已将文本中的所有哈希索引引用更改为b-tree.

0 投票
1 回答
21 浏览

java - 如何在 Hazelcast 中创建综合指数

我正在尝试通过使用复合键来提高 Hazelcast 查找的性能。我有一个类实体:

我在 hazelcast-server.xml 中添加了一个包含上述 3 个字段的复合索引:

查询 Hazelcast 地图:

无论有没有索引,代码都可以正常工作。

问题:

  1. 这是创建和使用复合索引的正确方法吗?
  2. 有没有办法检查索引是否实际被查询使用?(我无法在 hazelcast 管理中心控制台上获得任何与索引相关的信息)

我扫描了很多 hazelcast 文档和互联网论坛,但找不到具体的答案。

Hazelcast 版本:3.12 Java 版本:8