Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czysta teoretyka
Forum PHP.pl > Forum > Bazy danych > MySQL
TrAvIkK
Pytanie czysto teoretyczne.

Jeżeli przyjdzie użytkownikowi wykonać operacje wpisania do tabeli powiedzmy 100 - 200 tysięcy wpisów to jak najlepiej to zrobić?
Myślałem o cronjob, który co pare s wpisywałby do tabeli po 10-20 tysięcy, i to w sumie nie byłoby źle, tyle, że może istnieją lepsze rozwiązania?
dr_bonzo
Nie pytaj o teorie bo wyglada ona tak:
dodaj od razu wszystkie wpisy

tylko o praktyke:
czemu musisz w odstepach? jak czesto to bedzie wykonywane? itp
TrAvIkK
Bo chodzi o to, żeby nie zabić serwera.
Jeżeli użytkownik będzie chciał dodać 200 tys rekordów, a inny użytkownik jakieś 50 tys, jeszcze inny... To wtedy serwer sie wykrzaczy...

Dodanie 100 tys na serwerze który posiadam to operacja rzędu 6s, zdecydowanie za dużo.

A jak często?
Chodzi o przeniesienie danych z tabeli jednej do drugiej.
LonelyKnight
Raz piszesz, że chcesz przenieś dane z tabeli do tabeli a trochę wyżej coś o użytkownikach... czego właściwie potrzebujesz bo jakoś ciężko mi sobie wyobrazić sytuację, w której kilku użytkowników, w tej samej sekundzie chce dodać kilkadziesiąt/set tysięcy rekordów....

Skoro masz aż tak 'obciążony' serwer smile.gif i w ciągu sekund do bazy trafiają setki tysięcy rekordów to co da Ci cron? Powiedzmy, że rozbijesz porcję od jednego usera na minutę ale w ciągu tej minuty pojawi się kolejnych 20 użytkowników, którzy dorzucą swoje trzy gorsze - myślisz, że to ma sens?

//edit

...a przenosić możesz np. tak:

  1. CREATE TABLE tabela2 SELECT * FROM tabela1 WHERE coś tam


...przerzucisz i strukturę i dane.
TrAvIkK
Dane będą przenoszone z jednej tabeli do drugiej poprzez wykonanie przez użytkownika pewnej operacji, więc rozwiązanie, które opisałeś trochę mija się z tym co potrzebuję, ale to przeze mnie - źle opisałem problem.

Co mi da cron?
Rozbije to, jak zauważyłeś, na większą odległość w czasie - odciąży to serwer w pewnym stopniu, a użytkownik nie będzie musiał czekać na wynik całej operacji.
SongoQ
Nie ma sensu stosowac crona, no chyba ze to operacje cykliczne i pochodza z innej bazy wtedy warto sie zastanowic nad linkiem miedzy bazami jesli to dane pochodzace z innych zrodel a wrzucanie powiedzmy jest nie czesciej niz powiedzmy 1h i tabela posiada indexy na pola warto na czas wrzucania danych usunac wszystkie indeksy wrzucic taka paczke danych a nastepnie odbudowac index. Problem jeszcze sie pojawia z dostepem do tych danych po sciagnieciu indeksu.

Mozliwosci jest bardzo wiele. Jesli masz bardzo duzo rekordow i stosowane sa do tego skomplikowane zapytania i bardzo zalezy Ci na wydajnosci to zaintresuj sie tematem hurowni danych. Jest wiele pozycji na ten temat pisanych pod Oracle i M$ wiec cos do MySQLa by sie znalazlo.

Jak zrobisz to musisz sam zdecydowac, jesli zalezy Ci na wydajnosci dane pomnoz przez powiedzmy 10 - 100 i sprawdzaj jesli czasy beda znosne to bedziesz pewny ze dla Twojej ilosci danych tez bedzie ok.
TrAvIkK
Możesz przybliżyć temat hurtowni danych?
LonelyKnight
Cytat(TrAvIkK @ 2.06.2007, 21:35:31 ) *
Możesz przybliżyć temat hurtowni danych?



http://pl.wikipedia.org/wiki/Hurtownia_danych
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.