首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >同步客户端-服务器数据库

同步客户端-服务器数据库
EN

Stack Overflow用户
提问于 2010-08-04 23:06:45
回答 3查看 22.5K关注 0票数 85

我正在寻找一些通用策略,用于将中央服务器上的数据与并非总是在线的客户端应用程序同步。

在我的特殊情况下,我有一个带有sqlite数据库的android phone应用程序和一个带有MySQL数据库的phone应用程序。

用户将能够在电话应用程序和web应用程序上添加和编辑信息。我需要确保在一个地方所做的更改在所有地方都能反映出来,即使手机不能立即与服务器通信。

我不关心如何将数据从手机传输到服务器,反之亦然。我之所以提到我的特定技术,只是因为我不能使用MySQL可用的复制功能。

我知道客户机-服务器数据同步问题已经存在很长时间了,我希望获得有关处理该问题的模式的信息--文章、书籍、建议等。我想知道处理同步的一般策略,以比较优势、劣势和权衡。

EN

回答 3

Stack Overflow用户

发布于 2015-01-16 20:12:09

如果有人正在处理类似的设计问题,并且需要在多个安卓设备之间同步更改,我推荐使用Google Cloud Messaging for Android

我正在研究一种解决方案,其中在一个客户端上所做的更改必须传播到其他客户端。我刚刚实现了一个概念验证实现(服务器&客户端),它的工作方式非常出色。

基本上,每个客户端都将增量更改发送到服务器。例如,资源id ABCD1234已从值100变为99。

服务器根据其数据库验证这些增量更改,然后批准更改(客户端处于同步状态)并更新其数据库,或者拒绝更改(客户端不同步)。

如果变更被服务器批准,则服务器通过GCM通知其他客户端(不包括发送增量变更的客户端),并发送携带相同增量变更的组播消息。客户端处理此消息并更新其数据库。

很酷的是,这些更改几乎是瞬间传播的!如果这些设备在线的话。而且我不需要在这些客户端上实现任何轮询机制。

请记住,如果设备离线时间太长,并且GCM队列中等待传递的消息超过100条,则GCM将丢弃这些消息,并在设备恢复在线时发送一条特殊消息。在这种情况下,客户端必须与服务器进行完全同步。

也可以检查this tutorial,开始使用CGM客户端实现。

票数 6
EN

Stack Overflow用户

发布于 2016-10-21 12:19:49

这回答了使用Xamarin框架的开发人员(请参阅https://stackoverflow.com/questions/40156342/sync-online-offline-data)

使用xamarin框架实现这一点的一个非常简单的方法是使用Azure的离线数据同步,因为它允许按需从服务器推送和拉取数据。读操作在本地完成,写操作按需推送;如果网络连接中断,写操作将排队,直到连接恢复,然后执行。

实现相当简单:

1)在azure门户中创建移动应用(您可以在https://tryappservice.azure.com/这里免费试用)

2)将您的客户端连接到移动应用。https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-xamarin-forms-get-started/

3)设置本地存储库的代码:

代码语言:javascript
复制
const string path = "localrepository.db";

//Create our azure mobile app client
this.MobileService = new MobileServiceClient("the api address as setup on Mobile app services in azure");

//setup our local sqlite store and initialize a table
var repository = new MobileServiceSQLiteStore(path);

// initialize a Foo table
store.DefineTable<Foo>();

// init repository synchronisation
await this.MobileService.SyncContext.InitializeAsync(repository);
var fooTable = this.MobileService.GetSyncTable<Foo>();

4)然后推送和拉取您的数据,以确保我们拥有最新的更改:

代码语言:javascript
复制
await this.MobileService.SyncContext.PushAsync();
await this.saleItemsTable.PullAsync("allFoos", fooTable.CreateQuery());

https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-xamarin-forms-get-started-offline-data/

票数 5
EN

Stack Overflow用户

发布于 2018-06-06 19:56:38

我建议你也看看Symmetricds。它是一个可用于安卓系统的SQLite复制库。您可以使用它来同步您的客户端和服务器数据库,我还建议在服务器上为每个客户端设置单独的数据库。尝试在一个mysql数据库中保存所有用户的数据并不总是最好的主意。特别是当用户数据将快速增长时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3406891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档