Hoi,
Voor een relatief eenvoudige (Java) applicatie die gebruik maakt van Postgres heb ik momenteel meerdere nodes draaien, die echter gebruik maken van 1 centrale PG instantie.
Deze PG instantie wil ik binnenkort gaan opsplitsen naar een instantie per applicatie node. De applicatie gebruikt momenteel een sequence in een PG tabel die opgehoogd wordt om oplopend telkens unieke IDs te genereren.
Met een DB instantie per node heb ik niet langer de beschikking over eenvoudige unieke IDs. Ik zat nu echter te twijfelen tussen 2 mogelijke oplossingen:
1)
Nog steeds gebruik maken van 1 centrale DB instantie, maar alleen voor het genereren van de IDs. De sequence kan atomic verhoogd worden met een waarde hoger dan 1, zodat ik een node in 1 keer een hele ID range kan geven. De machine kan dan weer opnieuw een range ophalen als de huidige (bijna) op is. Deze oplossing mapped ook direct naar de JPA/Hibernate SEQUENCE generator strategy, waarbij je met initialValue() en allocationSize() de range kan instellen die telkens (automatisch) opgehaald wordt.
2)
Elke machine van een uniek nummer voorzien (b.v. een hash van de hostname) en deze als soort prefix gebruiken voor mijn huidige ID. Een variatie hierop is in plaats van 1 ID, 2 IDs te gebruiken waarbij het paar dan uniek is. De ene ID is dan het unieke machine nummer en het andere ID een uniek nummer per node. De 2de variant vereist wel flink wat herschrijven van code. Het unieke machine nummer direct als een prefix gebruiken kan niet, omdat het ID een nummer moet zijn. Dit veranderen in een string is eigenlijk niet makkelijk te doen.
Ik vraag me af of iemand wat kan zeggen over welke 2 van de mogelijke oplossingen nu beter is en/of wat er eigenlijk het meest in de praktijk gebruikt wordt. Het lijkt me nogal een algemeen probleem, immers heel veel websites hebben te maken met unieke nummers (order, invoice, custumer, etc) en maken gebruik van meerdere nodes.
Voor een relatief eenvoudige (Java) applicatie die gebruik maakt van Postgres heb ik momenteel meerdere nodes draaien, die echter gebruik maken van 1 centrale PG instantie.
Deze PG instantie wil ik binnenkort gaan opsplitsen naar een instantie per applicatie node. De applicatie gebruikt momenteel een sequence in een PG tabel die opgehoogd wordt om oplopend telkens unieke IDs te genereren.
Met een DB instantie per node heb ik niet langer de beschikking over eenvoudige unieke IDs. Ik zat nu echter te twijfelen tussen 2 mogelijke oplossingen:
1)
Nog steeds gebruik maken van 1 centrale DB instantie, maar alleen voor het genereren van de IDs. De sequence kan atomic verhoogd worden met een waarde hoger dan 1, zodat ik een node in 1 keer een hele ID range kan geven. De machine kan dan weer opnieuw een range ophalen als de huidige (bijna) op is. Deze oplossing mapped ook direct naar de JPA/Hibernate SEQUENCE generator strategy, waarbij je met initialValue() en allocationSize() de range kan instellen die telkens (automatisch) opgehaald wordt.
2)
Elke machine van een uniek nummer voorzien (b.v. een hash van de hostname) en deze als soort prefix gebruiken voor mijn huidige ID. Een variatie hierop is in plaats van 1 ID, 2 IDs te gebruiken waarbij het paar dan uniek is. De ene ID is dan het unieke machine nummer en het andere ID een uniek nummer per node. De 2de variant vereist wel flink wat herschrijven van code. Het unieke machine nummer direct als een prefix gebruiken kan niet, omdat het ID een nummer moet zijn. Dit veranderen in een string is eigenlijk niet makkelijk te doen.
Ik vraag me af of iemand wat kan zeggen over welke 2 van de mogelijke oplossingen nu beter is en/of wat er eigenlijk het meest in de praktijk gebruikt wordt. Het lijkt me nogal een algemeen probleem, immers heel veel websites hebben te maken met unieke nummers (order, invoice, custumer, etc) en maken gebruik van meerdere nodes.