sqlite - 为什么需要多次调用 zumero_sync?

标签 sqlite zumero

根据 zumero_sync 的文档:

If a large amount of information needs to be pulled from the server, this function may need to be called more than once.

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

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

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

最佳答案

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

(1) 为什么 zumero_sync() 会这样工作?

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

我会先回答 (2),因为它更容易:是的,它可以以不同的方式工作。相反,我们可以(并且可能很快会,你提出这个)实现一个额外的函数,命名为 zumero_sync_complete() 之类的东西,它在循环中执行 zumero_sync() [的内容] 并在同步完成后返回。

我们没有实现 zumero_sync_complete() 因为它不会增加太多值(value)。这是一个简单的循环,因此您可以自己编写它。 :-)

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

对 (1) 的回答:

Zumero 同步协议(protocol)旨在让服务器能够灵活地返回部分结果(如果需要的话)。为了减少服务器上的负载(并提高其可扩展性),它通常确实想要做到这一点。

鉴于此,将其公开给客户的一个原因是为了增加客户的灵 active 。只要我们进行多次往返,我们不妨让客户有机会在它们之间做一些事情(比如,也许,更新进度条)。

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

或者,在多线程客户端的情况下,它可能想要处理在同步进行时客户端发生的更改。

这提出了应该如何管理锁定的问题?我们是否在整个循环中持有 sqlite 写锁?还是仅在绝对必要时才使用?

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

但是,如您所见,sqlite3 shell 没有循环。它不是一个应用程序。而且它没有线程。或者进度条。因此,在这个用例中,更简单、功能更弱的 zumero_sync() 形式是有意义的。

关于sqlite - 为什么需要多次调用 zumero_sync?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17639269/

相关文章:

java - 将 SQLite 数据库备份到外部存储 - 文件引用错误

sqlite - 如何从Android客户端调用zumero_internal_auth_add_user

javascript - 在 javascript 的帮助下使用 Zumero 进行同步

android - 使用 Zumero 同步 android 应用程序,更改缓存文件的位置

sqlite - 时间戳驱动的冲突解决方案是否可行?

sql - 在字符串末尾用数字排序

android - SQLite 按字母顺序对特殊字符进行排序

python - 有没有一种简单的方法可以在 Python 中逐表将数据库数据从 SQLite 迁移到 Postgres?

sqlite - 如何在 sqlite 中构造我的查询?

c# - 加载 Zumero 模块依赖项时遇到问题