Kezdőoldal » Számítástechnika » Programozás » Tinder szerű alkalmazásnak...

Tinder szerű alkalmazásnak adatbázis dizájn?

Figyelt kérdés
Dolgozom egy kis hobbi projekten, ahol az emberek a Tinderhez hasonlóan matchelhetnének egymással, de az adatbázis igazi kihívás. Tegyük fel, van egy táblám a usereknek, gondolom szükségem van külön a matcheknek is. Tudom, hogy a Tinder MongoDB, de én mindenképpen MySQL-ben szeretném az adatbázist. Milyen táblákra lenne szükségem, és milyen függvénnyel oldjam meg a matcheket?

2023. aug. 28. 12:14
1 2
 11/18 A kérdező kommentje:
10-es, óriási köszönet, hasonló megoldás eszembe sem jutott volna. Tetszik, hogy működőképes, és nincs túlbonyolítva. Ha lehetne többször zöld kezet adni, tőlem végtelen ciklusban kapnád a lájkokat. :)
2023. aug. 28. 19:01
 12/18 anonim ***** válasza:
100%

10-es: miért kell tárolni mindkét irányt? Elég a likes táblában csak a viszonzatlan likeokat tárolni. Minden like előtt lenne egy query, hogy az id-d benne van-e a likes oszlopban. Van rá index, gyors lesz. Ha benne van, akkor kitörlöd a listából, és belerakod kettejüket egy matches táblába. Úgyis külön kell őket kezelni.


Kérdező: a one-to-many és many-to-many modelleknek nézz utána.

2023. aug. 30. 20:18
Hasznos számodra ez a válasz?
 13/18 anonim ***** válasza:
100%
Miért kéne külön matches tábla? Ha a likeok tárolva vannak lekrédezhető (igaz gyorsabb ha van külön tábla, de egy materializált view tud sokat segíteni).
2023. aug. 30. 20:26
Hasznos számodra ez a válasz?
 14/18 anonim ***** válasza:
Csak a gyorsaság miatt. A viszonzott likeok megtalálása gyorsabb, ha nincsenek benne a matchek. Főleg úgy, hogy egy match kétszer szerepel az oda-vissza irány miatt, ami méginkább hizlalja a táblát. Szerintem hatékonyabb ezeket szeparálni. Vagy úgy megcsinálni a táblát, hogy liker és liked mellett van egy matched, és akkor a matchek nem fognak két helyet elfoglalni.
2023. aug. 30. 20:55
Hasznos számodra ez a válasz?
 15/18 anonim ***** válasza:

A sebesség miatt igen elképzelhető. Mert feltehetően jóval kevesebb lesz a match mint a sima like. Azt már korábban írtuk, hogy a "like" tábla eszméletlen nagyra képes növekedni, bár indexekkel egészen jó eredményt lehet elérni a lekérdezéseknél.


Vagy úgy megcsinálni a táblát, hogy liker és liked mellett van egy matched, és akkor a matchek nem fognak két helyet elfoglalni.


Csak melyik végéhez írod be a kapcsolatnak? Főleg akkor amikor jön majd az, hogy "X" felhasználó törölni akarja magát, és minden adatát. Ez majd a törlést is bonyolítani fogja. Míg ha csak a liker és a liked van tárolva akkor a törlés egyszerűen végig fut (és pl. nem fog rekord véletlenül beragadni, bár arra lehet karbantartó rutint írni, amelyik időnként kigyomlálja a beragadt matche-ket.) Ugyanígy (és a nagy számú felhasználó miatt a tranzakció kezelést és a lockolást is nagyon meg kell gondolni) előfordulhat, hogy amikor a matche-s táblát töltöd és vennéd ki a like táblából a rekord párt van egy abnormál terminate. Nyilván az lesz a menet, hogy ha észre vesszük a matche-t akkor előbb teszzük be a matches táblába és utána vesszük ki a like táblából (vagy onnan ki se vesszük, mert mi van ha...). Megint ez olyan probléma ami néhány 100 (legyen 300) felhasználóig nem lesz gond, mert akkor a like tábla nem lesz hosszabb mint 300x300 rekord ami még 90 000 rekord teljesen szépen fog menni. Majd ha meglesz a néhány 10 000 felhasználó fog borulni a mutatvány. Itt jön az, hogy az adatbázis várható mérete is egy tervezési szempont.

2023. aug. 30. 21:05
Hasznos számodra ez a válasz?
 16/18 anonim ***** válasza:
100%

#12 gondoltam erre, de nem tetszett, hogy a likes meg a matcses tábla sémája kb ugyanaz.


Ráadásul extra query-k vannak(ha létrejön egy match, törölni kell a likes-ból + ha valaki visszavonja a likeot, akkor a matchesből törölni, a likes-ba meg visszatenni).


Szerintem felesleges bonyolultság.

2023. aug. 30. 21:06
Hasznos számodra ez a válasz?
 17/18 anonim ***** válasza:
100%

Lehetséges, hogy felesleges. Arra nem gondoltam, hogy a folyamatos törlések azért nem tesznek jót a performanciának, már csak az index miatt sem. Esetleg egy obsolate "flag", és utána bulk törlés.


Ha ilyennek állnék neki, akkor biztosan csinálnék valami tesztet, és megpróbálnám kimérni, hogy milyen erőforrással, mekkora táblánál lenne érezhető idő egy elemi művelet.

2023. aug. 30. 21:11
Hasznos számodra ez a válasz?
 18/18 anonim ***** válasza:
#16: Ezért nézném meg a materializált view használhatóságát a matches-re. Kérdés, hogy lehet-e jól megfogalmazni egy ügyes view-t ami gyorsan és hatékonyan képes vissza adni a matche-ket és akkor készül egy materializált view amit csak akkor kell majd refreshelni ha valaki éppen matche-el. Itt jó lenne valami performancia tesztet is futtatni előzőleg, meg valami becslés, hogy milyen gyakran van match.
2023. aug. 30. 21:13
Hasznos számodra ez a válasz?
1 2

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!