如何在Hibernate和/或分布式环境中对对象进行排序



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

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

另一种方法是使用IMDG或缓存在共享位置设置顺序,并查询该位置以进行这些计算,但我认为这对此类任务来说太过分了。

哪种方法是最好的?还是别的?

具有整数顺序列的方法是可能的。然后,您还可以在数据库中添加一个版本列(可能已经有了),当一个用户更改订单时,必须保存所有具有新订单号的记录。由于版本列的原因,其他用户会被告知,由于修改了订单,他们必须重新加载数据。代替整数,您还可以使用小数点后有一些数字的数字或字符串,这两种方法都可以更容易地只更新顺序中真正有新位置的行,而不是更新表中的所有行。

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

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

只有在出现性能问题或不需要将订单持久化到数据库中(订单仅对一个会话有效)的情况下,我才会在共享位置缓存。

我不确定我是否正确理解了这个问题。如果不同的用户可以定义自己的订单,那么订单应该以某种方式进入用户的配置文件,它可以是一个单独的表或字段。

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

最新更新