【问题标题】:Defining a Hazelcast MapStore for Key-Ranges为键范围定义 Hazelcast MapStore
【发布时间】:2015-05-28 10:57:41
【问题描述】:

当我们想要实现 MapStore 接口时,我们只有 loadAll 方法来初始化地图。因此,您必须提供一组键才能加载到地图中。当您将日期/时间作为主键时,您如何处理这种情况。直观地,人们会定义一个键范围where tst between a and b。但是由于我们只能提供一个 Set 我们必须预先获取所有可能的日期时间值(通过 SQL 或其他方式)。下一次 IMap 将开始敲击数据库,逐个获取每个键。这是最好的方法吗?没有更方便的方法吗?

【问题讨论】:

    标签: hazelcast


    【解决方案1】:

    我的建议是停止将地图视为关系数据库中的表。尝试以符合 Map 语义的术语进行思考(如果您使用 Map,因为 Hazelcast 中有其他分布式集合)。例如,您必须记住,您只能对内存中可用的对象进行查询,因为查询的语义仅适用于 Hazelcast 用作数据网格而不用作缓存的情况。如果语义是缓存的使用,您应该通过键限制您的访问,就像您在 Java 中使用传统地图一样。

    例如,当涉及到数据网格时,您必须认为对数据库的访问通常只是为了响应灾难恢复场景。因此,从磁盘加载到内存的初始数据可能会对数据库造成很大的冲击,但这只会发生在恢复的情况下,因此并不是一个主要的障碍。在使用缓存的情况下,是的,在规划持久性策略时非常高效非常重要,因为对数据库的访问会更加频繁。

    如果您提供有关您的特定用例的更多信息,尤其是关于驱逐政策的信息,也许我可以为您提供更多帮助。

    希望这会有所帮助。

    【讨论】:

    • 是的会同意这一点,否则你提到的选项(使用 SQL 查找键)听起来像是要走的路。
    • 抱歉,不,这没有帮助。这与我们如何威胁地图无关,而是我们如何最初用范围数据填充地图 - 而不是在启动时对生产数据库造成太大影响。也许有人可以指出起点类,我可以在其中分叉我自己的 hc 实现以最初获取数据
    • 对不起,我不同意。恕我直言,了解您的用例对于建立持久性策略非常重要。我坚持认为,首先重要的是您是将 Hazelcast 视为缓存解决方案还是数据网格。我已经编辑了我之前的答案,以更好地解释我的观点。
    • 我真的认为它是这种情况下的键/值存储。但在特殊情况下,此键是时间序列,因此是有序的并且可能有间隙。我正在考虑开发一个可导航的地图实现,您可以在 github 问题网站上找到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多