为什么需要多次调用zumero_sync?

时间:2013-07-14 12:13:46

标签: sqlite zumero

根据zumero_sync的文档:

  

如果需要从服务器中提取大量信息,   可能需要多次调用此函数。

在我使用Zumero的Android应用程序中没有问题;我一直在调用zumero_sync,直到返回值不以"0;"开头。

但是,现在我正在尝试编写一个也与我的服务器dbfiles同步的管理脚本。我想使用sqlite3 shell,让脚本通过命令行参数传递SQL来执行。我需要在循环中调用zumero_sync(SQLite不支持)以确保db完全同步。如果必须,我可以在一个循环中调用sqlite3(读取它的输出,寻找"0;"),或者甚至编写一个C ++应用程序来本地调用SQLite / Zumero函数。但如果单个zumero_sync足够,那肯定会更容易。

我想我的真正问题是:可以zumero_sync更改,以便在返回之前完成同步吗?如果存在现有行为更有用的情况,可能会有一个参数来指定使用哪种模式?

1 个答案:

答案 0 :(得分:4)

我在这里看到两个基本问题:

(1)为什么zumero_sync()按照它的方式工作?

(2)它能以不同的方式工作吗?

我首先回答(2),因为它更容易:是的,它可以有所不同。相反,我们可以(也可能很快就会提到这个)实现一个额外的函数,命名为zumero_sync_complete(),它在循环中执行zumero_sync()的guts,并在同步完成后返回。 / p>

我们没有实现zumero_sync_complete(),因为它没有添加太多值。这是一个简单的循环,所以你可以自己编写它。 : - )

呃,除了不支持循环的脚本环境。就像sqlite3 shell一样。

回答(1):

Zumero同步协议旨在为服务器提供灵活性,以便在需要时返回部分结果。并且为了减少服务器上的负载(并增加其可伸缩性),它通常 想要完全这样做。

鉴于此,将此暴露给客户的一个原因是增加客户的灵活性。只要我们进行多次往返,我们也可以让客户有机会在它们之间做一些事情(比如,可能更新进度条)。

客户端在循环迭代之间可能想要做的另一件事是处理错误。

或者,对于多线程客户端,它可能希望处理同步进行时客户端上发生的更改。

这提出了如何管理锁定的问题?我们在整个循环中持有sqlite写锁吗?或者只有在绝对必要时?

结论:强大的应用程序可能希望实现循环本身,以便它可以做出自己的决定并保持对事物的完全控制。

但是,正如您所观察到的,sqlite3 shell没有循环。它不是一个应用程序。它没有线程。或者进度条。所以这是一个用例,其中zumero_sync()的一种简单且不那么强大的形式是有意义的。