【发布时间】:2012-09-25 20:41:02
【问题描述】:
我的非 sql 数据库中有一个非常大的元素列表。
每个元素都有一个从 1 到 N 的排序顺序。这种排序顺序指定了结果在表单上的显示方式。
当在 UI 中触发顺序更改时(将元素 i 放在位置 j)我需要更新它们之间的所有实体。如果元素 1 成为最新的,我需要进行 N 次更新。
有没有一种有效的方法可以降低此操作的成本?有没有一种智能的方法来索引排序值?
一些注意事项:
- 我正在重新设计我的应用程序,以便能够使用更智能的解决方案重新索引实体。
- 写入(更新)的成本是提取(读取 1 个实体)的 +-4 倍。
- 列表很大,无法放入内存。
【问题讨论】:
-
就 javascript 而言,您对 DOM 所做的更改越少越好。最好在使用 appendChild 之前确定表单元素的顺序。
-
首先,元素是否必须是实际的随机访问索引,或者只是单调递增的顺序。 (例如,如果您可以在 2.333 和 2.666 位置添加两个元素并让它们显示在 2 和 3 之间,这是否足够好,或者您是否需要知道位置 3 的元素实际上是第 4 个元素而不是6号?)
-
其次,我假设查找必须比插入/移动更快,但如果这不是真的,那就会打开更广泛的答案,所以值得一问……
-
第三,您是否保留了一个列表/dict/whatever 元素的(以及其他成员)排序顺序,以及一个单独的列表/数组/任何排序顺序(如 SQL 样式索引)?您使用的实际数据结构是什么?
-
什么语言?您列出了其中的多个。
标签: java algorithm google-app-engine data-structures google-cloud-datastore