我想知道是否有人能够很好地解决我在过去几年遇到过的问题.
我有一个购物车,我的客户明确要求它的订单很重要.所以我需要将订单持久保存到DB.
显而易见的方法是简单地插入一些OrderField,我将数字0分配给N并以这种方式对其进行排序.
但这样做会使重新排序变得更加困难,我不知何故觉得这个解决方案有点脆弱,有一天会回到我身边.
(我在NHibernate和SQL Server 2005中使用C#3,5)
谢谢
我需要能够在DB中存储大量订购商品.到目前为止,这是直截了当的:
ID Position OtherFields
1 45 ...
2 4736 ...
3 514 ...
...
Run Code Online (Sandbox Code Playgroud)
在查询中,我总是需要获得一些项目(基于OtherFields过滤),但顺序正确.也很容易,在位置上放置一个索引并使用"按位置排序".
现在问题是:项目经常更改其位置,而不仅仅是1或2.如果ID 2将位置从4736更改为2000,我需要更新其位置和旧位置2000和4735之间所有元素的位置,添加1在每一行.并且不仅每个事务更改一个ID而且还有一些ID,并且在短时间内可以有许多事务.
我认为处理更新问题最优雅的方法是使用链接列表而不是位置列,我可以通过将其前任链接到其后继者,然后通过在其之间链接将其插入其他位置,从而将ID 2从其旧位置移除新的前任和继任者.这将是每个职位变更的持续和少量更新,它也是我处理变更的首选方式(在我的案例中是Java).然而,这引起了N + 1问题查询正确的顺序-甚至几元,我不得不通过整个名单在最坏的情况下找出正确的顺序.
所以我的问题是:您建议在必要的更新和查询性能之间取得良好的平衡?
到目前为止,我看到两个有希望的方
是否存在DBMS(理想情况下是OpenSource),它不仅可以处理链接列表,而且还可以处理具有良好性能的链接列表,例如通过使用链接元素的内部索引?
也许只有一个BLOB可以选择存储整个链接列表!这样的链接列表有多大/它在数据库中使用了多少内存,并且当获取时让我们说1.000.000条目?我正在使用Java + Hibernate以防万一.我想在获取BLOB后处理内存中的整个列表应该非常快!
但当然也欢迎其他想法!
c# ×1
database ×1
indexing ×1
linked-list ×1
nhibernate ×1
recursion ×1
sql ×1
sql-order-by ×1