Pytanie o wydajność

0

Witam pytanie dotyczące "wydajności" danego skryptu rozwiązania.
1)Otóż mam formularz w którym wpisuje sobie treść wiadomości. Zostaje ona wysłana w tle poprzez ajax dzięki Jquery a następnie umieszczona w bazie danych. Kolejnym punktem jest to , że ta wiadomość ma być dodana do jakiegoś diva i potrzebny mi jest jej identyfikator ( wiadomości ) . Czyli podczas dodawania wiadomości a raczej po dodaniu pobieram jej identyfikator i potem dodaje to do diva. Czy to jest dobre rozwiązanie ? Czy może jest lepsze ?

  1. Są dwie tabelki w których są użytkownicy oraz relacje między nimi ( nie znajomości tylko kto kogo obserwuje ). I czy dobrym rozwiązaniem jest aby w tabelce z relacjami były tylko identyfikator użytkownika który kogoś obserwuje i identyfikator osoby obserwowanej ( dodałem także typ "relacji" , żeby nie robić dodatkowych tabel z blokowaniem itp ). Czy takie rozwiązanie jest dobrym rozwiązaniem przy milionie użytkowników ? Oczywiście to tylko przykład z tym milionem po prostu chce aby to było jak najwydajniejsze.

Dla głupio pytających czy to kolejna kopia twittera to nie. To jest coś na czym chce sobie potestować.

0

1 - hm, jak już się tak bardzo przejmujesz transferem (choć niby testujesz, no ale..) - to w diva wstaw dane z formularza (które przecież chwilę wcześniej pobierasz) - o ile oczywiście php zwróci, że wpis jest w bazie.
2 - lepszej opcji chyba nie ma. nie wiem, nigdy nie pisałem serwisów na setki tysięcy użytkowników, a takie coś powinno spokojnie pociągnąć na shared hostingu przy 5 tys użyszkodników i nikt nie będzie się pluł o zużycie CPU/RAM.

0

1). No niby tak bo takie rzeczy jak avatar użytkownika mogę zapisywać w sesji podczas logowania itp itd. Gorzej jak chce użytkownik usunąć dopiero co dodany post lub napisać do niego komentarz... :/ a do komentarza potrzeba id wpisu. Bo z usunięciem to bym zrobił warunek , że wpis użytkownika o id np 5 plus o której godzinie :) Jednak potrzebne mi kolejne zapytanie , aby wyciągnąć identyfikator.

0

nie rozumiem. wysyłasz żądanie ajaxem, dostajesz w odpowiedzi np "OK,45" - czyli udało się dodać, id wpisu/czegoś to 45. Albo JSON, chociaż taki string będzie oszczędniejszy dla łącza ;)

0

Wysyłam , dodaje się do bazy ( 1 zapytanie ). Pobieram ( 2 zapytanie do db ) id tego wpisu i jak wszystko ok to zwracam albo w json cały kodzik html z już tym wpisem i id nadanym :) Albo kopiuje sobie jakiś inny wpis poprzez js i zamieniam wartości. To zależy jak będzie szybciej. No i tak robie jak napisałeś tylko się źle zrozumielismy.

0
czytowydajnejest napisał(a)

Wysyłam , dodaje się do bazy ( 1 zapytanie ). Pobieram ( 2 zapytanie do db ) id tego wpisu i jak wszystko ok to zwracam albo w json cały kodzik html z już tym wpisem i id nadanym :) Albo kopiuje sobie jakiś inny wpis poprzez js i zamieniam wartości. To zależy jak będzie szybciej. No i tak robie jak napisałeś tylko się źle zrozumielismy.

Jeśli korzystasz z pdo, to możesz id ostatnio dodanego rekordu pobrać za pomocą lastInsertId() (http://php.net/manual/en/pdo.lastinsertid.php).

0

No tak wiem , tylko że kilku użyszkodników może w tym samym momencie dodawać i jeszcze coś się porypie :) Dlatego jeszcze dodaje sobie warunek z identyfikatorem użytkownika :)

Dzięki.

0
czytowydajnejest napisał(a)

No tak wiem , tylko że kilku użyszkodników może w tym samym momencie dodawać i jeszcze coś się porypie :) Dlatego jeszcze dodaje sobie warunek z identyfikatorem użytkownika :)

Dzięki.

lol co ty gadasz
w bazie danych nie może być dwóch takich samych ID jeśli jest polem unique i dba o to silnik bazy

0
unikalna_nazwa napisał(a)
czytowydajnejest napisał(a)

No tak wiem , tylko że kilku użyszkodników może w tym samym momencie dodawać i jeszcze coś się porypie :) Dlatego jeszcze dodaje sobie warunek z identyfikatorem użytkownika :)

Dzięki.

lol co ty gadasz
w bazie danych nie może być dwóch takich samych ID jeśli jest polem unique i dba o to silnik bazy

człowieku naucz się czytać. Pobiore ostatnio dodane a moze w tym sammymm momencie ktos inny dodał albo 1 setna sekundy pozniej to wtedy pobierze mi inne ID ! POmysl...

0

w tym co właśnie on cytował napisałem , że w tym samym momencie. Nie jestem może za zdolnym pisarzem ( czytaj programistą ) ale myślę ,że językiem ojczystym się dobrze posługuje :)

0

last_insert_id jest per połączenie - zawsze zwróci ci te id o które ci chodzi z poprzedniego zapytania - myśl

działa to w milionach serwisów ale oczywiście akurat u cb będzie sprawiać problemy :D

0

Podaj mi przykład takiego kodu. Bo ja nie znam takiego rozwiązania. Ponieważ potrzebuje dwóch zapytań do bazy aby wpisać dane a potem pobrać a może to trwać kilka sekund np. jak łącze jakieś słabe lub jakiś problem.... A w tym samym czasie ( teoretycznie ) kilkadziesiąt ludzi może coś dodać. Czy baza danych jest aż tak mądra by rozpoznać kto dodał i pobrać ten identyfikator ? Czy może jednak trzeba dodać warunek. No chętnie chce zobaczyc co pokażesz:)

0

sam sobie to sprawdź
daj se sleep(10) między mysql_insert_id a insertem i odpal drugi raz po 5 sekundach

0

kurde nie mam konta a odpisałbym pod komentarzem @sirkruk . Otóż to jest zapytanie tylko wbudowane w php bo można to załatwić

 SELECT LAST_INSERT_ID()

tylko php daję nam taka mozliwosc przynajmniej ja tak wnioskuje :)

0

dobra założyłem konto tak nawiasem ;p No właśnie przeglądam ten wątek + testuje i właśnie najlepszym rozwiązaniem jest normalne zapytanie typu ( SELECT id FROM wpisy WHERE id_usera=3 ORDER BY id DESC LIMIT 1 ) lub ( SELECT id FROM wpisy WHERE id_usera=3 AND date=jakas_data ) . Jednak chyba lepiej to drugie zapytanie gdyż użytkownik ( jakiś wściekły ) może próbować na siłe dodać kilka wpisów na raz ( chyba , że go zablokuje ) i wtedy data by pomagała wybrac odpowiedni wpis. Ale moge dziada zablokować lub dać ochrone antyfloodową.
a OPTIMIZE TABLE tabelka . Opłaca się używać np gdy mamy przypuscmy identyfikator 760 a ostatnie 10 rekordow nabił gość który usuwa konto to zredukuje się do tego numerka co było przed nim czyli do 750 ? Bo np. mamy dużo uzytkownikow i nie pasuje nam takie id :P A da się obejść autoinkrementacje bo chciałbym zrobić coś takiego , że mamy użytkowników z id 1 ,3,4,6 no i tak żeby nowym uzytkownikom nadało id 2 , 5 . Wiem , że można samemu kontrolować ale czy da się to jakoś załatwić dzięki kochanemu php lub sql .

unikalna_nazwa jesteś wścibski i robisz to specjalniee

0
zuck napisał(a)

A da się obejść autoinkrementacje bo chciałbym zrobić coś takiego , że mamy użytkowników z id 1 ,3,4,6 no i tak żeby nowym uzytkownikom nadało id 2 , 5 . Wiem , że można samemu kontrolować ale czy da się to jakoś załatwić dzięki kochanemu php lub sql .

najpierw się zastanów czy na pewno chcesz to zrobić
wprowadza to dużo zamieszania
na przykład ktoś usuwa konto, ktoś inny w tym samym czasie zakłada a admin chce zbanować tego pierwszego (chore scenario - wiem :D)
w każdym razie wszelkie logi stają się niespójne i id nie określa jednoznacznie czy chodzi o nowego czy starego usera

a w większości serwisów id zawsze są po kolei i spójne. po prostu userzy nigdy nie są fizycznie kasowani z bazy danych tylko flagowani jako usunięci

1 użytkowników online, w tym zalogowanych: 0, gości: 1