Dit is misschien een slecht idee, maar ik zit te overwegen om de hashcode() functie te gebruiken als identifier voor een bepaalde set aan gegevens.
De reden waarom ik dit wil gaan doen is omdat ik een vrij "random" set aan gegevens binnen krijg die ik wil gaan opslaan. Echter, als ik eenzelfde set aan gegevens binnen krijg, moet ik wel een id kunnen genereren, om hem later weer terug te vinden.
Om het wat duidelijker te maken hier een klein voorbeeldje van het object dat ik aangeboden krijg.
Nu kan het zijn dat bij device A brand / imei / serialnumber ingevuld is. Bij device B ip / serialnumber en dan weer bij device C alleen het macaddress.
De combinatie zal per device altijd hetzelfde zijn. Dus waneer device A weer wordt aangeboden, zal die hetzelfde brand / imei / serialnumber hebben.
Dit wordt overigens gebruikt om te zien op welke tijdstippen er door device A (de timestamp in het object) contact is opgenomen met 1 van onze systemen.
Nu wil ik voor elk uniek device een id gaan generen op basis van de ingevulde velden. Ik zit nu te denken om hashcode van het object te berekenen en dat te gebruiken als identifier voor mijn device (misschien nog met een technische primary key erbij). Echter vraag ik me af wat de kans op collisions is wanneer ik dit daadwerkelijk op deze manier implementeer. Ook voelt het als misbruik van de hashcode functie.
een voorbeeldje van de hashcode functie zal dan zijn:
Een andere oplossing kan zijn om van alle aangewezen velden een compound key in de DB te maken, maar daar wordt ik ook niet vrolijk van. Dit is namelijk een simpel voorbeeld, in de realiteit kunnen het wel meer dan 10 betreffen en ik durf even niet te voorspellen wat dit met de performance van MySQL gaat doen.
Maar misschien ligt de heilige graal op een hele andere plek. Ik ben iig benieuwd naar commentaar
De reden waarom ik dit wil gaan doen is omdat ik een vrij "random" set aan gegevens binnen krijg die ik wil gaan opslaan. Echter, als ik eenzelfde set aan gegevens binnen krijg, moet ik wel een id kunnen genereren, om hem later weer terug te vinden.
Om het wat duidelijker te maken hier een klein voorbeeldje van het object dat ik aangeboden krijg.
Java:
1
2
3
4
5
6
7
8
9
10
11
| public class Device { public String brand; public String type; private String macaddress; private String imei; private String serialNumber; private String ip; private Date timestamp; //getters & setters } |
Nu kan het zijn dat bij device A brand / imei / serialnumber ingevuld is. Bij device B ip / serialnumber en dan weer bij device C alleen het macaddress.
De combinatie zal per device altijd hetzelfde zijn. Dus waneer device A weer wordt aangeboden, zal die hetzelfde brand / imei / serialnumber hebben.
Dit wordt overigens gebruikt om te zien op welke tijdstippen er door device A (de timestamp in het object) contact is opgenomen met 1 van onze systemen.
Nu wil ik voor elk uniek device een id gaan generen op basis van de ingevulde velden. Ik zit nu te denken om hashcode van het object te berekenen en dat te gebruiken als identifier voor mijn device (misschien nog met een technische primary key erbij). Echter vraag ik me af wat de kans op collisions is wanneer ik dit daadwerkelijk op deze manier implementeer. Ook voelt het als misbruik van de hashcode functie.
een voorbeeldje van de hashcode functie zal dan zijn:
Java:
1
2
3
4
5
6
7
8
9
| @Override public int hashCode() { int hash = 5; hash = 97 * hash + (this.brand != null ? this.brand.hashCode() : 0); hash = 97 * hash + (this.type != null ? this.type.hashCode() : 0); // etc.... return hash; } |
Een andere oplossing kan zijn om van alle aangewezen velden een compound key in de DB te maken, maar daar wordt ik ook niet vrolijk van. Dit is namelijk een simpel voorbeeld, in de realiteit kunnen het wel meer dan 10 betreffen en ik durf even niet te voorspellen wat dit met de performance van MySQL gaat doen.
Maar misschien ligt de heilige graal op een hele andere plek. Ik ben iig benieuwd naar commentaar
The ships hung in the sky in much the same way that bricks don’t.