Mi megvalósítása gyorsan keresni a kereszteződés (címke rendszer)

  • MySQL
  • SQL

Azt szeretném kérdezni, hogy valaki hogyan lehet megoldani a problémát a keresést címkéket. Milyen szoftvert.

A két fő feltétel:
1) A probléma - A rendszer gyorsan (

1-50 ms), hogy válaszoljon a kérdésre a szellem "megtalálják az összes dokumentumot, amelyben van (1-tag vagy címke-tag-30 vagy 100500 vagy.) És (tag-tag 50 vagy 1000, vagy.) És".. Az OR lehet, hogy akár húsz tag, és olyan körülmények között lehet tíz.
2) Mivel az adatok gyakran frissíthető, akkor meg kell, hogy elérjék a minimális idő frissítése a változásokat.

Megpróbáltam használni Redis típusú és SET BITMAP (hasonlóan itt „Gyors szűrő katalógus online áruházak.”). SET nem közelíthető meg (a beállított gondozott és személyazonosító iratok), mert még abban az esetben a metszési két 100k hiszi hosszabb a szükségesnél. BITMAP nem közeledett, mert a rendkívül kimerült azonosító okmányok, ennek eredményeként az extra memória-felhasználás a „lyukak”. Általában, ha több nagy, Redis ki a dobozból illeszkedik rosszul.

Most dolgozik változata Sphinx. ID tagek vannak írva sql_attr_multi. Ez biztosítja, hogy az előírt követelmények keresési sebességet. Követelmény Ez a frissítés az építőiparban a fő és a delta index. A fő index (mely magatartás keresés) bejelentett osztott. Ez alapvetően jól működik, de néha ez a sok új változások és delta index kezd lassulni. Újjáépíteni a fő index néhány percet vesz igénybe (most valami 3,5m id dokumentumok említik). Úgy tűnik, nem hosszú, de azt tervezik, hogy növelik a dokumentumok száma több tucat alkalommal. az adatok frissítése közben is emelkedni kezd.

Szeretném tudni, hogy van-e más megoldás (C Tarantool? Elasticsearch?) És aki használja mi.

sim3x. Az összes szemetet fedők valamit 4GB. Ie Igen, minden a memóriában jön. De ez nem számít, hogy hogyan érzem magam, mert az aktuális feladat a sok hülye ID képviselő unsigned int 32.. Ha vezetni őket széles Redis (A program keretében: A Key „tagId.ID_tega” (például „tagId.100”), beállított érték, amelyben ID kapcsolatos dokumentumok ezt a címkét, vagyis a dokumentum ID megkettőződik sokszor), akkor kiderül valami valahol 2,5 GB.

Alex ládák.
Ezután meg kell forgatnia a beállításokat az adatbázis
Lásd a táblázatot indexek, lassú lekérdezések, például a munkahelyi kérések

Ne amíg körülbelül retek gondolja - van egy csomó fölött és részletek
Amíg a teljes adatbázis kerül a memóriában - optimalizálása érdekében

sim3x. Nem, nem így van. Lényegében az OR. Emellett a kezdeti feladata egészen más. Meg kell „hogy megtalálják az azonosító az összes dokumentumot, amelyek a (tag-tag 1 vagy 500 vagy tag N.), és (tag-tag 20 vagy 30) I.”. További lehetőségek, de csatlakozni, nem látok. Általában keretében az RDBMS nem működik megfelelően.

sim3x. Nem, tudom. Mintegy sishnoe bővítése mellett postgri én biztosan gondolta, de ha tiszta sishny kód nem tud a kereszteződés N készletek (képviselő int) gyorsabb, mint a Szfinx, a füst jelenti felé sishnogo bővítése mellett a Build elején. Természetesen értem, hogy a kódot valószínűleg nem a legjobb, és van valami gondolni, de én nem sishnik így a saját nem fejeződött be. És mivel a probléma nem egyedi elvileg valahogy benne, hogy valaki már létrehozott valami hasonlót formájában elkészült könyvtárban. Ez ischyu.

Alex ládák. A PostgreSQL natív kereszteződés
Sishnoe bővítése szükséges már kimerítette, ha gyorsítási képességeket az ügyfelek számára

A beállított paramétereknek megfelelően kiválasztott bármely dokumentum kevesebb mint egy másodperc
dokumentumok csoportjából két héten belül (nem számít, hogy hány dokumentumot) választjuk kevesebb mint 10 másodperc
a maximális mintavételi idő az összes tag 20 perc dokumentumok

szerver a fenék közelében - 1 százalékkal 8 mag, 58 GB RAM, ez a szerver 32 bázisok széles körben használják (csak meghajtók jó)

Teach Math rész
- vágási
- indexek
- fájlcsoportok
- Inmemori

Base 4 gig :))))) van ez a bázis a 700 GB-os és 100 GB asztal több személyes módon normalnenko, nagyon gyorsan választott :)

Persze más platformokon is lehet optimalizálni

A francba!
Base 4 Giga - Carl. hallod 4 Giga Carl.
(Miközben a problémát egyedül indexek voltak xs tudja, mennyire mérjük indexek több mint 1,5-szerese az adatokat)

igruschkafox nekem egy második hosszú idő. (És van MySQL). A szűrő kell működnie legfeljebb 50 ms. A primitív mező 2. táblázat (amelyek int-ek) tagId, docId nakosyachit elég nehéz. És vannak feljegyzések csak 4M. Úgy tűnik, minden egyszerű. És ez működik. Kell keretében csak túl lassú. Mennyi idő van-adatbázisban megy a választ arra a kérdésre „hogy megtalálják id dokumentumokat, amelyben van (1 címke vagy tag-2 vagy tag-10) és (címke 100 vagy a 200 címke vagy a címke 300.) És”. azaz lényegében általánossá () és () -ben és az IN (). ugyanakkor olyan mintát legalább egy pár tag kapcsolatos több mint 100k dokumentumokat. Legyen akár 10 címkék IN, és ilyen körülmények között legfeljebb 10. Úgy is néz ki, mint egy kérést, és hogyan végzik?

Mintegy particionálás tudom. Itt szeretnék tenni, hogy a PostgreSQL öröklés útján táblázatokat.

Vobnyh készítő

Hagyok egy megjegyzést történetében. Ezen a ponton az áramkör szfinx a leggyorsabb. Kérdés delta index merészkedett csak egy része az újraszámlálás. Az alkalmazás most már nyomon követi annak méretét, és amint azt több dokumentumot 20k fut rotirovanie. Ez megkapta a szükséges mintavételi sebesség még összetettebb lekérdezéseket.

És biztos, hogy megkapja az összes? Mégis mindegy, ha a felhasználó nem olvassa el. Tudod kap minden tag külön, AJAX-edik és húzza meg. ha szükséges, rendezni az ügyfél.