2013-04-30 106 views
0

我们正在开发一个应用程序,该应用程序使用存储在Gemfire中的深对象模型。客户端将访问REST服务来执行缓存操作,而不是通过Gemfire客户端访问缓存。我们还计划将Gemfire下的数据库作为记录系统,使用异步写入进行数据库更新和插入。保持Gemfire与数据库同步

在这种情况下,保证插入或更新到Gemfire中将导致数据库中的成功插入或更新,而无需设置精心设计的服务器端验证(本质上是对Gemfire操作必须与DB操作约束匹配)。我们不能冒泡数据库插入或将成功/失败更新回客户端,而不会使数据库调用与Gemfire操作同步。这显然会破坏将Gemfire用于低延迟客户端操作的目的。

我们很好奇,其他采用后写入的Gemfire采用者如何解决保持数据库与Gemfire数据结构同步的问题?

回答

1

我们通常建议在CacheWriter中的GemFire中实现验证,因为根据定义,它将在缓存发生任何修改之前调用。

http://gemfire.docs.gopivotal.com/javadocs/japi/com/gemstone/gemfire/cache/CacheWriter.html

这就是说,我在顾客看到这样一种模式已经收到有关区域“A”的数据,并实现基本验证那里,接受该数据。然后这些数据将按照您所描述的使用后写式复制到数据库,通过AsyncEventListener在插入的try/catch中的哪个位置进行批处理,如果发生任何错误,则会将该数据存储在另一个具有用于写入的另一个侦听器的区域中,在后面,非批处理,所以你实际上可以看到哪个记录失败,并决定如何做相应的。

是这样的:

数据 - > cacheWriter基本检查 - >区域A - > AEL(批次500〜N个事件) - > DB 如果发生错误复制到区域B - >监听坚持上DB单个记录 - > 对失败的记录执行一些操作。

在他们的情况下,他们有一个接口,手动上区域B.

希望帮助,如果不是也许你可以提供关于你的使用情况的详细信息...

干杯清除挂起记录。

0

Gemfire ver8及以上版本解决了您访问缓存对象REST服务的问题。

Gemfire REST