Kezdőoldal » Számítástechnika » Programozás » Adatbázis tervezés - Tudnátok...

Adatbázis tervezés - Tudnátok segíteni nekem megtervezni egy egyszerű táblát?

Figyelt kérdés

Sziasztok! A legjobb tudásom szerint elkészítettem egy adatbázist (MySQL), de sajnos használhatatlan. Az újratervezésben szeretném a segítségeteket kérni.


A probléma:

A MySQL adattáblámban több, mint 250 millió rekord van jelenleg. Bármilyen interakció a táblával (lekérdezés, utasítás) percekig tart.


A szerver (localhost, a fejlesztés miatt):

- Windows 8.1 Pro

- RAM: 12 gb

- Apache 2.4.17, MySQL 5.7.9


Ahogy most a táblám szerkezete kinéz (egy táblám van):

var1 karakterlánc - max 16 karakter (átlagban 8-9) (index, kulcs, egyedi)

var2 tinyint

var3 tinyint

var4 tinyint

var5 tinyint

var6 boolean

var7 boolean

var8 boolean


Minden rekordnál minden mezőnek van értéke és a rekordok között nincs ismétlődés.


Utánaolvastam a problémának és a következőket találtam:

- Konfiguráció módosítása (mivel nem javított a helyzeten, ezért gyárira állítottam vissza)

- Táblapartícionálás (ezt nem tudom hogyan kell :( )


A célom az, hogy a tábla adatait egy Ajax-ot alkalmazó keresési űrlapon megjelenítsem. Tulajdonképpen egy keresőt szeretnék létrehozni hozzá, de ez karakterleütésenként egy lekérdezést jelent, akár többszázezer adattal.


Minden segítséget nagyon köszönök nektek :)


2016. máj. 30. 23:22
 1/6 anonim ***** válasza:

250 millió sor 4 tinyintre meg 3 boolanre?

Mi akar ez lenni?

2016. máj. 30. 23:26
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
A karakterlánc egy domain cím. A négy (unsigned)tinyint egy ipv4 cím négy részre osztva. A négy boolean, amit fél bájtot visz pedig az, hogy aktív-e a szerver, ellenőrizve lett-e már a tartalma, valamint hogy kereshető-e.
2016. máj. 30. 23:33
 3/6 anonim ***** válasza:

> Tulajdonképpen egy keresőt szeretnék létrehozni hozzá, de ez karakterleütésenként egy lekérdezést jelent, akár többszázezer adattal.


Ehhez 2 megjegyzés:

- Ne minden karakterleütésnél fusson query, mert tök fölösleges. Állíts be az autocomplete-nek delay-t, mondjuk 500ms-t. Vagyis ha 500ms-ig nincs leütés, akkor induljon lekérdezés.

- Ne kérdezz le többszázezer adatot, mert szintén fölösleges. 10-20-nál többet nem érdemes megjeleníteni, így lekérdezni sem*, inkább csinálj lapozást, ha ez valami admin felülethez kell, és használd a LIMIT és OFFSET záradékokat.


(*: Persze ha aggregálást is végeznél az összes találaton, az más tészta.)

2016. máj. 30. 23:42
Hasznos számodra ez a válasz?
 4/6 A kérdező kommentje:
Köszönöm a két tippet. Alkalmazni fogom őket. A késleltetés meg is van. Viszont, sajnos, egy LIMIT 100-al is túl lassú a lekérdezés ahhoz, hogy effektíven használni lehessen a keresőt. Külön táblákba, kezdőbetű szerint az IP címek miatt nem tudom taglalni. Ahhoz pedig, hogy az IP címeket és domain címeket külön táblába helyezzem segédmező, valamilyen azonosítót tartalmazó oszlop kellene, ami megint csak fölösleges extra adat.
2016. máj. 31. 05:50
 5/6 anonim ***** válasza:
Extra adat nélkül nem tudsz particionálni. Ha a javasolt ügyességek nem elegendőek, particionálnod kell - extra adattal.
2016. máj. 31. 10:20
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Abban tudnál segíteni, hogy hogyan kell egy ilyen táblát MySql-ben partícionálni?
2016. máj. 31. 16:38

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, 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!