如何使用 Pivotal GemFire 处理来自外部独立数据源的数据?

How to handle data from an external, independent data source with Pivotal GemFire?

我是 GemFire 的新手。

目前我们正在使用 MySQL 数据库并希望迁移到 GemFire。

如何将存储在 MySQL 中的现有数据移至 GemFire?即,有没有办法将现有 MySQL 数据导入 GemFire?

有许多不同的选项可供您将数据从 1 个数据存储(例如 MySQL 之类的 RDBMS)迁移到 IMDG(例如 Pivotal GemFire)。 Pivotal GemFire 不为此目的提供任何 tools OOTB。

但是,您可以...

A) 编写一个 Spring Batch 应用程序以一次性将所有数据从 MySQL 迁移到 Pivotal GemFire。这是大多数大规模转换过程的典型情况,从一个数据存储转换为另一个数据存储,作为升级或迁移的一部分。

使用 Pivotal GemFire 作为目标数据存储的优势在于它可以存储 Java Objects。因此,如果您正在使用 ORM 工具(例如 Hibernate)将存储在 MySQL 数据库表中的数据映射回您的应用程序域对象,那么您可以立即简单地转身并直接存储这些相同的对象进入 Pivotal GemFire 中相应的 Region。将 Object 存储到 GemFire 中不需要额外的映射。

不过,如果您需要的不是那么紧急,那么您也可以...

B) 利用 Pivotal GemFire 的 CacheLoader, and maybe even the CacheWriter 机制。 CacheLoaderCacheWriter 是“Read-Through”和“Write-Through”设计模式的实现。

可以找到此方法的更多详细信息 here

简而言之,您实现 CacheLoader 以在缓存未命中时从某些外部数据源加载数据。创建 Region 时,您使用 GemFire Region 附加或 register CacheLoader。当一个Key(可以对应你的MySQL Table Primary Key)被请求(Region.get(key))并且一个entry不存在时,GemFire会参考CacheLoader来解析值,前提是您实际使用 Region.

注册了 CacheLoader

通过这种方式,您可以根据需要从 MySQL RDBMS 中慢慢构建 Pivotal GemFire。

显然,Pivotal GemFire 很可能无法将 RDBMS 中的所有数据存储在 "memory" 中。因此,您可以同时启用 Persistence and Overflow [to Disk] 功能。通过启用 Persistence,GemFire 将在下次节点联机时从它自己的 DiskStores 加载数据,假设您之前将它们关闭。

如果您想 运行 Pivotal GemFire 和 MySQL 并行一段时间,CacheWriter 机制很好,直到您可以转移 [=70= 的足够职责为止] 例如,交给 GemFire。每次在 GemFire Region 中写入或更新条目时,CacheWriter 将写回您的基础 MySQL 数据库。您甚至可以使用 GemFire 的 AsyncEventQueues 和 Listeners 异步执行此操作(即 "Write-Behind");参见 here

显然,您有很多选择。您需要仔细考虑您的选择并选择最能满足您的应用要求和需要的方法。

如果您还有其他问题,请告诉我。