Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] LOSOWY REKORD, szukam sposobu bardziej wydajnego niż RAND()
lysy2005
post
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 18.01.2009

Ostrzeżenie: (0%)
-----


Witam,
mam bazę 4 GB i chce pobrać losowy rekord spełniające moje kryteria.

Teraz mam zastosowanie:
Select pole FROM tabela WHERE pole='1' ORDER BY RAND(); LIMIT 1

Ale wykorzystując RAND() zapytanie trwa bardzo długo,
przy dużych bazach nie spełnia roli.
W jaki sposób wy wyciągacie losowe rekordy w takich dużych bazach?
Z góry dziękuje za pomoc
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
by_ikar
post
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Dobrym rozwiązaniem byłoby zastosowanie cron'a, który powiedzmy co 10min mieliłby nawet bardzo skomplikowane zapytanie, z losowymi rekordami, ale większą ilością, powiedzmy 10k czy tam nawet 100k i zapisywał ich nie wiem, id, czy nawet całe wiersze, do pliku i potem odczytywać te 10k losowych rekordów i z tych 10k losowych rekordów wyciągać powiedzmy 20 losowych przy każdym requeście, które nam są potrzebne. Jakaś tam losowość pozostaje. Mysql akurat w przypadku tak dużej ilości danych nie jest dobrym rozwiązaniem. Do przechowywania dużej ilości danych dobre są bazy typu nosql, które lepiej sobie radzą z tak dużą ilością danych. Nie wiem jak mysql zachowa się powiedzmy przy 500gb danych. Radzę się zastanowić nad zmianą bazy.
Go to the top of the page
+Quote Post
uupah5
post
Post #3





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 4.09.2010
Skąd: warszawa

Ostrzeżenie: (0%)
-----


coraz ciekawsze pomysły:
rozbijanie tabeli na wiele z powodu jednego zapytania? a reszta logiki aplikacji sama się dostosuje?
20GB to za dużo dla mysql?

Autorze, moim skromnym zdaniem problem jest rozwiązywalny bez zmiany bazy
Rzuć więcej info o samej bazie/tabeli/zapytaniach. opicy tego co robisz za pomocą php możesz sobie darować

@all: no offence;)
Go to the top of the page
+Quote Post
by_ikar
post
Post #4





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Cytat(uupah5 @ 20.06.2011, 10:49:40 ) *
coraz ciekawsze pomysły:
rozbijanie tabeli na wiele z powodu jednego zapytania? a reszta logiki aplikacji sama się dostosuje?
20GB to za dużo dla mysql?

Autorze, moim skromnym zdaniem problem jest rozwiązywalny bez zmiany bazy
Rzuć więcej info o samej bazie/tabeli/zapytaniach. opicy tego co robisz za pomocą php możesz sobie darować

@all: no offence;)


20gb na mysql to nie jest za dużo, ale do składowania dużej ilości danych, używa się wyspecjalizowanych w tym kierunku baz danych, które radzą sobie o niebo lepiej, od średniego mysqla.
Go to the top of the page
+Quote Post
uupah5
post
Post #5





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 4.09.2010
Skąd: warszawa

Ostrzeżenie: (0%)
-----


Cytat(by_ikar @ 20.06.2011, 17:59:57 ) *
20gb na mysql to nie jest za dużo, ale do składowania dużej ilości danych, używa się wyspecjalizowanych w tym kierunku baz danych, które radzą sobie o niebo lepiej, od średniego mysqla.

temat dobry na OT.
w tym przypadku mamy jednak wątek osoby, która średnio sobie radzi z mysql'em, ma zerowe pojęcie o tuningu tej bazy i prawdopodobnie nie ma doświadczenia z przetwarzaniem większych ilości danych. Podsuwanie rozwiązań typu nosql... chyba trochę na wyrost.
ale żeby nie rozbijać wątku - ja się zamykam z dywagacjami:)
Go to the top of the page
+Quote Post

Posty w temacie
- lysy2005   [PHP][MYSQL] LOSOWY REKORD   18.06.2011, 12:48:03
- - matino   Tutaj masz bardzo przydatny link: http://net.tutsp...   18.06.2011, 12:56:11
- - lysy2005   Cytat(matino @ 18.06.2011, 13:56:11 )...   18.06.2011, 13:11:06
- - Hpsi+   Aż mi sie nie chce wierzyć że: [SQL] pobierz, pla...   18.06.2011, 13:17:25
|- - webdice   Cytat(Hpsi+ @ 18.06.2011, 14:17...   18.06.2011, 14:32:39
- - lysy2005   Cytat(Hpsi+ @ 18.06.2011, 14:17...   18.06.2011, 13:43:52
- - Speedy   Możesz zrobić tak: [SQL] pobierz, plaintext SELEC...   18.06.2011, 14:54:24
- - #luq   Co Wy z tym WHERE id = xxx? Przecież można: [SQL]...   18.06.2011, 15:59:48
|- - Speedy   Cytat(#luq @ 18.06.2011, 16:59:48 ) C...   19.06.2011, 20:09:23
- - lysy2005   Cytat(#luq @ 18.06.2011, 16:59:48 ) @...   19.06.2011, 17:09:18
- - aachi   Może rozbij tablice na kilkanaście mniejszych. Nie...   19.06.2011, 17:35:00
- - aachi   Panowie, ale pamiętacie, że autor nie potrzebuje l...   19.06.2011, 20:27:39
|- - Speedy   Cytat(aachi @ 19.06.2011, 21:27:39 ) ...   19.06.2011, 20:40:20
- - Fifi209   Fajnie jakbyś pokazał strukturę tej tabeli lub naw...   19.06.2011, 20:36:07
- - vokiel   Wybaczcie link do bloga, ale kiedyś o tym pisałem,...   19.06.2011, 20:56:24
|- - aachi   Cytat(vokiel @ 19.06.2011, 20:56:24 )...   19.06.2011, 21:15:32
- - by_ikar   Dobrym rozwiązaniem byłoby zastosowanie cron'a...   20.06.2011, 09:16:55
|- - uupah5   coraz ciekawsze pomysły: rozbijanie tabeli na wiel...   20.06.2011, 09:49:40
|- - by_ikar   Cytat(uupah5 @ 20.06.2011, 10:49:40 )...   20.06.2011, 16:59:57
|- - uupah5   Cytat(by_ikar @ 20.06.2011, 17:59:57 ...   20.06.2011, 22:28:44
- - thek   Ja osobiście kombinowałbym także pod kątem: Zlicz ...   20.06.2011, 14:15:08


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 07:47