数据库设计 – 如何移动排序列表中的元素并保持CouchDb写入“原
我在couchdb文件中有一个列表的元素.假设这3个文件中有3个元素:
{ "id" : "783587346","type" : "aList","content" : "joey","sort" : 100.0 } { "id" : "358734ff6","content" : "jill","sort" : 110.0 } { "id" : "abf587346","content" : "jack","sort" : 120.0 } 视图检索所有“aList”文档,并按“sort”排序显示. 现在我想移动元素,当我想要将“jack”移动到中间时,我可以在一个写入中做这个原子,并将它的排序键改为105.0.现在,视图以新的排序顺序返回文档. 经过大量的排序,我可以在多年后最终得到类似于50.99999和50.99998的排序键,而在极端情况下,可能会出现数位问题? 有什么建议,有没有更好的方法呢?我宁愿将元素保存在单独的文档中.不同的用户可能并行编辑不同的列表元素. 用户也可能会同时更改文档顺序(当用户想要移动两个不同的文档(如joey和jill)时,同时也可能会出现棘手的问题,比如说“sort”= 130.0同时). 也许有更好的方法? 我在CouchDb交易中错过了什么吗? 解决方法您正在使用实数的通用模式来进行排序的用户控制.这是一个很好的技术,由Damien Katz推荐.要在相邻文档A和B之间移动,您将排序字段设置为A.sort和B.sort的平均值. 这个问题有几个部分. 浮点精度怎么样? Javascript数字是双精度IEEE-754浮点数.他们 双打有很多精度.如果这是人类发起的活动的话 1.在后台重新规范排序值 记得在BASIC中重写行号吗?一样. 有一个cron工作或其他任务(NodeJS越来越受欢迎) >等到站点处于低活动状态以解决问题 2.使用无限精度的十进制数据类型 而不是排序存储一个Javascript号码,它可以存储一个字符串 接下来,您的客户端(谁计算排序值)需要 我个人喜欢BigDecimal.在你的情况下,你必须改变你的 并发活动的冲突呢? CouchDB放松了会发生什么是用户期望的CouchDB的 对于UI中的三个元素: > ItemA 如果我在C之后移动A并且在C之后移动B,该怎么办?显然,这个名单将会是 无论如何,没关系:太好了! CouchDB将随意订购A和B 或者,B必须来到A之前,因为[某些原因]:那么你的排序值是错误的. 如果你说,A不能移动这么快之后,B移动,那也是应用程序无论数据存储如何,必须执行代码.换句话说,这不是一个事务性的事情,它是软件逻辑.对于拖放UI元素,我的感觉是,这不值得,“没关系”解决方案是最好的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |