根据以下文件zumero_sync:
如果需要从服务器中提取大量信息,则可能需要多次调用此函数.
在我使用Zumero的Android应用程序中没有问题; 我只是一直打电话,zumero_sync直到返回值没有开始"0;".
但是,现在我正在尝试编写一个也与我的服务器dbfiles同步的管理脚本.我想使用sqlite3shell,并让脚本传递SQL以通过命令行参数执行.我需要调用zumero_sync一个循环(SQLite不支持)来确保db完全同步.如果必须的话,我可以sqlite3在一个循环中调用(读取它的输出,寻找"0;"),或者甚至编写一个C++应用程序来本地调用SQLite/Zumero函数.但如果一个zumero_sync人足够,那肯定会更容易.
我想我真正的问题是:可以zumero_sync更改,以便在返回之前完成同步吗?如果存在现有行为更有用的情况,可能有一个参数用于指定要使用的模式?
小智 4
我在这里看到两个基本问题:
(1) 为什么 zumero_sync() 会这样工作?
(2) 它的工作方式可以不同吗?
我将首先回答(2),因为它更容易:是的,它可以以不同的方式工作。相反,我们可以(并且可能很快就会,您提出这个问题)实现一个附加函数,名为 zumero_sync_complete() 之类的函数,它在循环中执行 zumero_sync() 的内容,并在同步完成后返回。
我们没有实现 zumero_sync_complete(),因为它没有增加太多价值。这是一个简单的循环,因此您可以自己编写。:-)
呃,除了不支持循环的脚本环境。就像 sqlite3 shell 一样。
对(1)的回答:
Zumero 同步协议旨在让服务器能够灵活地返回部分结果(如果需要)。为了减少服务器上的负载(并提高其可扩展性),它通常确实希望这样做。
鉴于此,向客户公开这一点的原因之一是提高客户的灵活性。只要我们进行多次往返,我们不妨给客户一个在它们之间做一些事情的机会(比如,也许,更新进度条)。
客户端可能想要在循环迭代之间做的另一件事是处理错误。
或者,在多线程客户端的情况下,它可能需要处理同步进行时客户端上发生的更改。
这就提出了应该如何管理锁定的问题?我们是否在整个循环期间持有 sqlite 写锁?或者仅在绝对必要时才进行?
底线:一个强大的应用程序可能希望自己实现循环,以便它可以做出自己的决定并保留对事物的完全控制。
但是,正如您所观察到的,sqlite3 shell 没有循环。而且它不是一个应用程序。而且它没有线程。或者进度条。因此,在这个用例中,更简单、功能更弱的 zumero_sync() 形式是有意义的。
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |