eerste vrije id gebruiken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas

bas

28/04/2009 12:45:00
Quote Anchor link
Hallo allemaal

Ik ben bezig met een database waar een garantie op is dat er minstens 4 miljard records in kunnen (wat mogelijk uitloopt tot vele miljarden), nu ben ik bezig met een functionaliteit waarmee ik alle acties log van een gebruiker in me db omdat dat op te vragen moet zijn.
De discussie of dit wel of niet in een db moet staan is niet relevant, die is al geweest en besloten toch een db te gebruiken op betere zoek mogelijkheden.

Nu is mijn vraag, hoe kan ik alle vrije id's gebruiken?

Nu is de id colom auto_increment, en dat moet het niet zijn, want de gelogde acties kunnen ook per gebruiker verwijderd worden, en dan valt er een mogelijk gat van 200 records. nu wil ik dat alle query's de eerst mogelijke id pakken die vrij is zodat we niet een gatenkaas db krijgen..

Ik weet dat ik dit zou kunnen oplossen door een loopje te maken en zo het id te kunnen krijgen, maar dat is niet echt handig als er straks miljarden records zijn.

Weet iemand of hier een standaard functie voor is zoals insert_id()
 
PHP hulp

PHP hulp

25/11/2024 00:30:18
 
TJVB tvb

TJVB tvb

28/04/2009 12:52:00
Quote Anchor link
http://www.postgresql.org/docs/8.1/static/datatype.html
bigint 8 bytes large-range integer -9223372036854775808 to 9223372036854775807

http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html
A large integer. The signed range is -9223372036854775808 to 9223372036854775807. The unsigned range is 0 to 18446744073709551615.

Van je id moet je afblijven. Een gat in je id's moet geen probleem zijn.
Past het ook niet meer in een bigint en heb je echt veel gaten dan houdt je een opschoon actie (of nog beter) zorg huur je een paar professionals in die je kunnen adviseren wat de mogelijkheden zijn en wat het beste is. Maar dan ben je al een stuk verder en moet het geld daarvoor ook geen probleem zijn.
Gewijzigd op 01/01/1970 01:00:00 door TJVB tvb
 
Klaasjan Boven

Klaasjan Boven

28/04/2009 12:55:00
Quote Anchor link
Ik hoop dat het goed komt een db met miljarden records laten opbouwen door iemand ID's wil gaan opvullen
 
Bas

bas

28/04/2009 13:05:00
Quote Anchor link
tis allemaal wat korter uitgelegd dan het in werkelijkheid is..
de database is een genormaliseerd database (waar alleen geen rekening is gehouden met een history_action tabel ) en deze ga ik nu toevoegen..
Elke actie die een gebruiker loslaat op een item moet gelogt worden zodat bij fouten oid terug te zien is wie wat gedaan heb.
dus het tusse tabelletje word een simpel tabel:

id - item_id - action_is - user_id

met de koppeling action_id naar een action tabbeletje:

id - discription

aangezien er 4 miljard items in kunnen, moet ik wel rekening houden met de mogelijkheid dat er op elk item minimaal 10 acties komen (40 miljard history actions dus)

Wat TJVB al aangaf:

TJVB schreef op 28.04.2009 12:52:
http://www.postgresql.org/docs/8.1/static/datatype.html
bigint 8 bytes large-range integer -9223372036854775808 to 9223372036854775807

http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html
A large integer. The signed range is -9223372036854775808 to 9223372036854775807. The unsigned range is 0 to 18446744073709551615.


had ik al rekening mee gehouden, het ging mij meer om, stel een item word verwijderd (plus de history op dat item) dat er dan een mogelijk gat komt (van misschien wel 2000 rows), wat ik wil opvulle met nieuwe history, zodat de kans groter is dat ik geen db limit behaal.
 
Arjan Kapteijn

Arjan Kapteijn

28/04/2009 13:06:00
Quote Anchor link
Waarom is het zo boeiend dat er ergens een gat van 200 ID's ligt, ik lig daar niet wakker van hoor. Ik moet er niet aan denken om een gat op te gaan vullen, niet alleen verhoog je daarmee de kans op problemen (wat gebeurd er als er 2 acties tegelijkertijd worden uitgevoerd?) maar ook koppel jij blijkbaar een 'waarde' aan een ID. Een ID is niks, noppes, nada... totaal niet boeiend om daar verder iets mee te gaan doen.
 
Leon Kunst

Leon Kunst

28/04/2009 13:11:00
Quote Anchor link
Wat ik mij afvraag, is dit nog wel snel? Als je dan een bepaalde zoekquery uitvoert op de 40 miljard records... duurt het dan niet minuten voor dat je wat terug krijgt??
 
Bas

bas

28/04/2009 13:13:00
Quote Anchor link
in mijn ogen leek het me boeiend omdat ik rekening hou met de toekomst..
- 4 miljard item
- elke actie op een item word gelogt
- stel je voor systeem draaid al 10 jaar
- klant kennende word er zo min mogelijk verwijderd (stel je voor je gooit wat weg wat je 2 jaar later nodig heb)
- etc etc

maar ik krijg de indruk dat ik me druk maak om niets dus zal wel ff wat testjes runnen hiermee, bedankt voor de feedback mensen :)
 
TJVB tvb

TJVB tvb

28/04/2009 13:19:00
Quote Anchor link
En waar haal je die 4 miljard vandaan? Dat vindt ik al interessant. Heel vaak wordt er namelijk een groot getal genoemd en blijkt dat binnen 10 jaar niet gehaald te worden. ( heb wel eens gehad dat er "op de groei" was gekocht. Na realistisch rekenen kwamen we na 25 jaar nog niet op dat aantal records en zou het systeem dan al lang vervangen zijn.)
 
Arjan Kapteijn

Arjan Kapteijn

28/04/2009 13:20:00
Quote Anchor link
Denk zelfs dat het trager word als we jouw oplossing gebruiken, verschillende acties die 'in tijd' dicht bij elkaar liggen kunnen dan qua ID aan de hele andere kant zitten. Wat de schrijfacties van een hardeschijf weer langzamer maken.
 
Jurgen assaasas

Jurgen assaasas

28/04/2009 13:23:00
Quote Anchor link
Waarom deleten? Gewoon inactief zetten?

En een id is een uniek gegeven. Als jij ID's zelf gaat wijzigen krijg je vanzelf corrupte database. Tenzij dit gewenste functionaliteit is, niet doen.
 
Bas

bas

28/04/2009 13:47:00
Quote Anchor link
TJVB schreef op 28.04.2009 13:19:
En waar haal je die 4 miljard vandaan? Dat vindt ik al interessant.


Dat is een garantie die bij het produkt verkocht word

Arjan Kapteijn schreef op 28.04.2009 13:20:
Denk zelfs dat het trager word als we jouw oplossing gebruiken, verschillende acties die 'in tijd' dicht bij elkaar liggen kunnen dan qua ID aan de hele andere kant zitten. Wat de schrijfacties van een hardeschijf weer langzamer maken.


Hier heb je inderdaad een goed punt.

Jurgen schreef op 28.04.2009 13:23:
Waarom deleten? Gewoon inactief zetten?


Als een item verwijderd word, bestaat de log nog (deze moet apart verwijderd worden, aangezien het verwijderen van het item ook een actie is), maar als de log uiteindelijk verwijderd word (wat alleen beheerders kunnen), moet deze ook gewoon weg zijn, het heeft geen meer waarde om deze te bewaren. Anders gebruik ik inderdaad de inactief methode.


Bedankt voor jullie hulp, ik zie nu dat ik de gaten niet hoef op te vullen, en mocht er ooit een dag komen dat het limiet in de beurt komt, dan is mijn ervaring vast wel zo ver om het dan alsnog op te lossen :p
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.