我需要为同步的数据库客户端预先分配简洁的整数主键(来自连续范围)。
用例非常简单:在移动客户端具有间歇性连接的情况下,我需要打印带有短序列号的票证。这些数字必须足够短,以便在嘈杂的环境中通过糟糕的PA系统读取,以奖励门奖。
Realm似乎非常适合这项任务 - 但我需要允许每个客户端在连接到服务器时预先为自己分配一组保证唯一的序列号,这样他们就可以在以后打印票证,即使离线也是如此
class TicketNumber extends RealmObject {
@PrimaryKey int serialNumber;
String clientId; // instance identifier unique to each client
}
我的意图是客户端A执行一个事务来创建一堆TicketNumber
个对象,从max(serialNumber)+1开始,在每个对象上设置自己的clientId。如果客户端B已经在该范围内创建了TicketNumber
个对象,我希望我可以依赖事务失败(抛出ObjectExists)。
但是,如果客户端A或客户端B在创建时断开连接,它将在同一范围内快速创建本地副本。当同步发生时,它会将冲突对象的clientId
设置为最后一个“创建”它的客户端。显然,如果两个客户都已经打印了具有相同序列号的票证,那对我来说是个问题。
我认为,为了保证客户对票号的所有权,我需要“在线优先”创建对象,这样我就可以观察并对冲突做出反应。有没有办法知道领域客户端的连接状态?我正在努力做甚么可能吗?我是否必须等待计数器可用?