0

我需要以任意顺序保留某些对象(由用户随意指定),但我不知道哪种方法是最好的。

我一直在考虑只是在我的实体中设置一个整数顺序字段并让用户订购它们,但这种方法让我感到困扰,因为我们有 3 个服务器分派请求,我相信如果我更新数据库中的订单,它会迫使我更新/每次我想根据该顺序进行计算时合并我的实体。

另一种方法是使用 IMDG 或缓存在共享位置设置订单并查询该位置以进行这些计算,但我认为这对于此类任务来说是多余的。

哪个是最好的方法?还是其他?

4

2 回答 2

1

具有整数顺序列的方法是可能的。然后你还要在数据库中添加一个版本列(可能你已经有一个),当一个用户更改订单时,必须保存所有具有新订单号的记录。由于版本列,其他用户会收到通知,因为修改了订单,他们必须重新加载数据。除了整数之外,您还可以使用小数点后带有一些数字的数字或字符串 - 两者都可以更轻松地仅更新在订单中真正具有新位置的行,而不是更新表中的所有行。

这种方法的不便之处在于,用户必须重新加载行(这意味着他必须重新进行实际修改),只是因为不同的用户更改了顺序。如果这种情况很少发生,你可以忍受它,但如果订单经常发生变化,这可能是不可接受的。

为了避免这种不便,您可以仅为订单创建一个单独的表(作为列的订单号、数据表的键和版本列)。该表与数据表具有 1:1 的关系。当订单发生变化时,只需要更新这张表,这意味着其他用户在修改任何记录的数据时都不会感到麻烦。在这种情况下,您甚至可以实现不同的顺序(例如每个用户都可以定义自己的顺序)——这会将与数据表的关系从 1:1 更改为 n:1。

共享位置的缓存只有在存在性能问题或不需要将订单保存到数据库中时才会这样做(订单仅对一个会话有效)。

于 2012-10-02T10:19:39.943 回答
0

我不确定我是否正确理解了这个问题。如果不同的用户可以定义自己的订单,那么订单应该以某种方式转到用户的个人资料,它可以是单独的表格或字段。

为什么要将特定于用户的信息添加到实体表中?还是我误解了这个问题?

于 2012-10-02T10:44:57.513 回答