我正在寻找一种在核心数据中存储和搜索UUID的有效方法.这些UUID由分布式系统中的许多iOS设备生成.这些设备中的每一个可以存储大约20-50k UUID.
很明显,将UUID作为String存储在Core Data中会损害索引的效率.但经过一系列研究后,我发现将UUID作为二进制数据存储在核心数据中(并对其进行索引)可能效率低于将其存储为String.
由于SQLit中不支持类似BINARY或类似VARBINARY的数据类型.我想Core Data中的任何二进制数据类型的数据都存储在SQLit中的BLOB中.由于BLOB可能是要索引的最慢数据类型,因此会对性能产生不良影响.
那么任何人都可以帮忙回答,有没有更有效的方法将UUID存储在Core Data中?
我将实现具有多个移动客户端和基于Web的服务器应用程序的分布式应用程序.因此,允许每个客户端和服务器生成表条目.因此,我需要所有参与者的唯一主键,我希望能够离线生成密钥.
生成在分布式环境中使用的主键的最佳方法是什么?对于类似的问题,请参阅使用SQLite和Azure SQL数据库作为中央存储的在线/离线多客户端移动应用程序的最佳主键策略是什么?
我知道UUID密钥生成对于这种情况来说是一个很好的方法,但是我想坚持使用名称为_id的密钥并按照Android平台的建议输入.
我不希望具有设备(也是服务器是设备)id和本地ID 的复合 ID.这种方法无论如何都不会很好,因为服务器应该能够为某个客户端生成条目.在这种情况下,我还必须在服务器上使用设备ID.
因此,我目前最喜欢的是使用数据类型long构建我的密钥(我之前在另一个项目中执行了此操作).我想我将使用高/低方法(例如参见这里的Hi/Lo算法是什么?)并且有一个键包括:
必须在首次启动移动应用程序时从服务器获取客户端ID.所以第一次启动需要网络连接.这可能是这种方法的缺点.在设备上拥有客户端ID时,我可以在没有网络连接的情况下生成密钥.
通常,高id是数据库的唯一值.当用户卸载应用程序并再次安装它时,我必须将他视为新客户端,并且必须给他一个新的客户端ID.否则我将不得不在服务器上保存当前的高ID,以便能够在丢失或重新安装时恢复它 - 不值得努力.
在Android上获取高ID的最佳方法是什么?自动增量键不是解决方案.我需要类似发电机功能的东西.它必须在自己的事务中执行(而不是"用户"事务).有没有人在Android上体验过这种方法,有人能指出我正确的方向吗?(我只找到了这个答案).
您在多客户端应用程序(在线和离线)中使用了哪些关键策略?