ElderMael
ElderMael

Reputation: 7101

How to order objects in Hibernate and/or distributed enviroment?

I need to keep certain objects in an arbitrary order (dictated by the user, at will) but I do not know which would be the best approach.

I have been thinking in just set an integer order field in my entities and make the user order them but this approach troubles me because we have 3 servers dispatching requests and I believe that if I update the order in the database it forces me to update/merge my entitites every time I want to make calculations based on that order.

The other approach would be using an IMDG or maybe a cache to set the order in a shared location and query such location for those calculations but I believe this would be overkill for such task.

Which would be the best approach? or is it other?

Upvotes: 0

Views: 80

Answers (2)

Kent
Kent

Reputation: 195049

i am not sure if I understood the problem correctly. If different user could define his own order, then the order should somehow go to user's profile, it could be a separated table or a field.

why you want to add user-specific information to your entity table? Or I misunderstood the question?

Upvotes: 0

Johanna
Johanna

Reputation: 5293

The method with the integer order column is a possibility. Then you also add a version column into the database (probably you already have one), and when one user changes the order, all records with the new order number have to be saved. Due to the version column other users get informed they have to reload their data because of the modified order. Instead of the integer you also can use a number with some digits after the decimal point or a String - both makes it easier to update only that rows which really have a new place in the order instead of updating all rows in the table.

The inconvenience of this method is, a user has to reload the row (which means he has to re-do his actual modification) only because a different user changed the order. If this condition rarely happens, you can live with it, but if changes in the order happen quite often, this might be unacceptable.

To avoid this inconvenience you can create a separate table only for the order (as columns the order number, the key of your data table and a version column). This table has a 1:1 relation to the data table. When the order changes, then only this table has to be updated, which means other users do not get hassled when they modify the data of any records. In this case you even can realize different orders (for example every user can define his own order) - which would change the relation with the data table from 1:1 to n:1.

A cache in a shared location I only would do if there are performance problems or if there is no need to persist an order into the data base (order is valid only for one session).

Upvotes: 1

Related Questions