Jump to content
php.lv forumi

MySQL - unique ID


Java

Recommended Posts

  • Replies 45
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Toties veicot šādus atlasīšanas, grupēšanas un migrācijas darbus, tev tie GUIDi lieti noder, jo tu nevari sajaukti ID nekādi - GUID būs unikāls pa visu DB, savukārt tāds pats ID var būt 50 tabulās :))

 

Parādi konkrētu piemēru, kad kaut kas varētu tikt "tiek sajaukts". Man nav īsti skaidrs kā tu to domā.

Link to comment
Share on other sites

:) Ko te tagad domāt? Manuprāt, tiem unikāliem id ir tieša priekšrocība no tā, ka tie ir daudz unikālāki, bet mīnuss tāds - ka tie ir garāki un grūtāk lasāmi. Plus arī tas, ka tos nevar "ķert bez norādēm" tik vienkārši kā parastos id, iedrukājot kādu skaitli, unikālo id būs uzminēt grūtāk. Bet protams, tas garums ir mīnuss, jo urlī ne visai labi izskatās tik garš... Youtubei labi izskatās tie id.

Vēl piemēram - doma man tāda, ka pēc unikālā ID tu vari čekot vairākās tabulās, ja tev dati ir sagrupēti vairākās tabulās, savukārt pēc ID vari tikai vienā tabulā! :) To var darīt kaut vai sql procedūra...

Priekšrocības? Nu grūti tā pateikt, domāju, ka praktiskajā darbā (sevišķi ar ļoti lielām datubāzēm) šeit savas atsevišķas priekšrocības ir no tā, ka ID ir pavisam unikāls!

Link to comment
Share on other sites

Man gan izskatās, ka tu pats nezini kā varētu notikt kaut kāda "sajaukšanās". :)

 

Lab, pieņemsim man ir ID=120 - es īsti neesmu pārliecināts, no kuras tabulas tas ir - nu kaut kā nokļuvis - bet piemēram - pastāv iespējas uz divām vai trim tabulām, ka tas varētu būt, bet, ja visās 3 tabulās ir ID=120? Tad unikālais ID šeit lieti noder! :P

Link to comment
Share on other sites

Pieņemsim, ka datubāzē ir 234 tabulas.

Pirmajā ID veido pēc formulas: 234*N1 , kur N1-ieraksta kārtas numurs šajā tabulā [0..maxint]

Otrajā ID veido pēc formulas: 234*N2+1 , kur N2-ieraksta kārtas numurs šajā tabulā [0..maxint]

Trešajā ID veido pēc formulas: 234*N3+2 , kur N3-ieraksta kārtas numurs šajā tabulā [0..maxint]

...

Divsimttrīsdesmitceturtajā ID veido pēc formulas: 234*N234+233 , kur N234-ieraksta kārtas numurs šajā tabulā [0..maxint]

 

Un problēma atrisināta. ;)

Link to comment
Share on other sites

Aleksej - tavs algoritms nepārliecina... Unikālā ID algoritmā vajadzētu iekļaut timestamp un vēl kaut kādas lietas, teiksim, skaitli kas skaitās no 1-1000 un pēc tam atkal. Vēl varbūt kādu randomu, ja nepārliecina! Jāveido vairākiem apstākļiem, tikai ar timestamp un vēl kādu numuru klāt nepietiks, jo viss timestamp ir pārāk garš, tāpēc no tā jāveido kāds īsāks hash. Un tādā gadījumā tie hashi var sakrist arī pat dažādiem timestampiem, savukārt randoms ar vēl kādu apstākli klāt to iespēju, ka tomēr viss id būs vienāds samazina krietni.

Nezinu, cik tieši sanāk tā varbūtība, bet kaut kāda jau pastāv, ka var atkārtoties GUID:

"...generated GUID is not guaranteed to be unique, the total number of unique keys (2128 or 3.4×1038) is so large that the probability of the same number being generated twice is very small."

Nu gan jau, ka tā ir tikpat liela varbūtība, cik, piemēram, varbūtība, ka parasts cilvēks varētu iemācīties elpot caur dibenu...

Link to comment
Share on other sites

Aleksej - tavs algoritms nepārliecina...

Apbrīnojami... Tevi skolā tikai līdz 100 mācīja skaitīt? Līdz 234 netiki?

Alekseja "algoritms" tavā DB ģenerēs 100% unikālus ID, atšķirībā no tava GUID'a, par kuru pats tikko teici, ka tas var sagadīties neunikāls.

Link to comment
Share on other sites

Alekseja "algoritms" tavā DB ģenerēs 100% unikālus ID, atšķirībā no tava GUID'a, par kuru pats tikko teici, ka tas var sagadīties neunikāls.

 

Alekseja formula attiecas uz konkrētu tabulu skaitu datubāzē, tieši tāpēc nepārliecina. Un GUID ir globāli unikāls. Vari pievienot jaunas tabulas, nodzēst esošās - iemigrēt citu datubāzi ar saviem GUID - tik un tā viss būs unikāls - varbūtība pārāk maza, ka var atkārtoties divi vienādi GUID! Lai gan es uzskatu, ka var izdomāt arī ar garantiju, ka būtu unikāls - neatkarīgi no tabulu skaita konkrētajā datubāzē, ieliek arī parametru, kā jau teicu - uz konkrēto timestamp milisekundi vēl numuru no 1 līdz 10000, piemēram, diezvai vairāk ieraksti vienlaicīgi notiks vienā milisekundē... un šis atkārtojas pie katras milisekundes. Jautājums tik paliek - vai konkrētā timestamp hash ir unikāls.

Bet nu beidz tak muļķoties, tur jāņem primāri timestamp un vēl pāris drošības rādītāji un ej nu atkārto tādu GUID!!

Link to comment
Share on other sites


×
×
  • Create New...