我正在寻找一种将大型数据库从云缓存到本地网络上的主机(例如X)的方法。云数据库位于Postgresql中,主机X具有H2内存数据库以进行快速访问。
出于我的需要,我需要从云的一部分数据库初始化时将其下载到主机X上。子集数据库取决于主机X发送的规范。例如,如果主机X在network1中,则希望它缓存特定的记录;如果主机X在network2中,则希望它缓存来自云的其他一些记录。>
主机X不可靠,并且可以随时重新启动,因此只要主机X启动,就必须建立数据库缓存。我该如何解决这个问题?
我考虑过要在云中构建API来获取数据库。但是由于必须发送的子集数据库可能很大,因此我不确定如何实现此目的。我应该发送包含整个子数据库的大文件还是逐条记录发送。如果我按记录发送子集数据库记录,我将如何跟踪已发送的记录和未发送的记录。有什么聪明的方法可以做到这一点吗?
答案 0 :(得分:1)
一些可能的解决方案,具体取决于您的问题空间。我假设您正在使用缓存,因此您可能拥有过时的数据。我建议您定期创建各种子集的导出,并将它们放在文件位置(S3 / Block Blob / etc)中,以便在服务器启动时将其拉入订阅数据库。您可以通过确定导出内容的频率来确定可接受的陈旧程度。
或者,如果您需要更实时地转储以启动服务器,我将使用相同的方法,但不是将其作为推送,而是将其设为pull。请求数据库转储,阻塞直到完成,然后让主服务器以转储位置而不是数据本身作为响应。
不管采用哪种解决方案,客户端服务器启动时您都将处于一致状态。