Kezdőoldal » Számítástechnika » Programozás » Van jobb megoldás erre a...

Van jobb megoldás erre a Firebase unique kód generálásra?

Figyelt kérdés

Gyorsan a projektről amin dolgozom:

iOS app, Firebase


Egy játékot csinálok, amiben úgy lehet csatlakozni más létrehozott játékához, hogy megosztanak veled 1 kódot, ha jó kódot irsz be akkor csatlakozni tudsz a játékhoz, ha nem jó a kód akkor nyilván hibaüzenetet kapsz.


Amikor valaki létre szeretne hozni egy új játékot, akkor neki generálni kéne 1 kódot a játékhoz, de hogyan tudnám leghatékonyabban megnézni, hogy ez a kód létezik-e már az adatbázisban?


Mert használhatnám a uid-t amit létrehoz a collectionbe a firebase, de az túl hosszú, nekem elég lenne mondjuk egy 6 hosszú string.


Most generálni egy ilyen stringet nem nehéz, de ha lenne 1 millió játék az adatbázisban (nyilván nem lesz, ez csak egy hobbi projekt), akkor lehet hogy 5x olyan stringet generálnék ami már létezik és akkor az 5 fölösleges firebase olvasás, de nem látok erre jobb megoldást.



2023. febr. 1. 12:56
 1/6 A kérdező kommentje:

Mire beküldtem a kérdést rájöttem, hogy nem lenne 5 fölösleges olvasás, mert elég egyszer olvasni az egész adatbázist és azt egy tömbben tárolni, majd utána generálni és figyelni arra hogy abban ne létezzen.


Csak attól még mindig 1 millió játéknyi adatot kéne olvasni minden új játék létrehozásánál ami gondolom szintén nem túl jó.

2023. febr. 1. 12:59
 2/6 anonim ***** válasza:
88%

Erre nézve nincs jobb, mint amit leírtál.

A kód generálása és a már létező kódok listájával való összevetése. Ha talál egyezést, akkor újra generál. Ennyi.

Hat karakter hosszra nem is egy proci izzasztó feladat ez.

2023. febr. 1. 13:02
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:
100%
Guid generálás, nem lesz ütközés, nem kell ellenőrizni. Ha zavar, hogy hosszú, akkor átváltod valami nagy számrendszerre, vannak erre kész libek.
2023. febr. 1. 13:13
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:
Én ezt másként csinálnám: ha azt akarom, hogy valaki a játékomhoz csatlakozhasson, megnyomok egy gombot, ami generál egy hatjegyű számot, amivel a másik játékos mondjuk 2 percig be tud lépni a játékba, ha túllép az időn, akkor újat kell generálni. A 6 jegyű szám független a játékomtól, nem kell adatbázisban tárolni.
2023. febr. 1. 13:50
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:

Azt is csinálhatod, hogyha string-et akarsz akkor csinálsz egy bijektív szám -> string függvényt. Például 26-os számrendszerbe átváltod (a->0,b->1,c->2 ... z->25) ha az angol abc kisbetűit tartalmazhatja a string.

Az elv a következő : generálsz egy random egész számot 0-tartományméret között. Ennyiedik elemét kiolvasod az asszociatív tömbödnek ha létezik, ha nem akkor létrehozod benne.

Azaz Ha k a generált szám arr a tömb akkor

Ha nem létezik k-adik eleme akkor arr[k] = k

Ha létezett ha nem akkor is arr[k] értéket adod vissza.

Ez után az alábbi értékadást csinálod : arr[k] = arr[tartományméret - elemszám(arr) - 1] .

Garantáltan nem lesz ütközés. A teljes tartományméretig ez a módszer működik. A teljes tartományméretig végigfuttatva ez megfeleltethető a random keverő algortimusnak.

Az asszociatív tömböt tárolhatod nosql adatbázisban. Ha jól emlékszem key - value párokat tároló nosql adatbázis a ndbm. Nincs típus csak nyers blob-okat tárol (python-ban erre van szerializáció emlékeim szerint). Akármilyen erre alkalmas adatbázis lehet, ez csak egy tipp volt.

2023. febr. 1. 18:08
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:

@18:08:

Kifejletettem, hogy a generátornak a generálási tartományt mindig egyesével csökkenteni kell :

így kell tömbindexet kisorsolni : randrange(tartományméret - elemszám(arr)) kell generálni.

2023. febr. 1. 18:14
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!