Wpis z mikrobloga

Załóżmy mam 10k użytkowników miesięcznie, każdy z nich będzie co miesiąc zostawiać 20 dodatkowych rekordów w bazie danych to w ciągu roku będzie to 2.4mln, czy to nie czasem za dużo będzie?

Chodzi o moduł zliczania wyświetleń danej podstrony i chciałbym zapisywać każde wejście użytkownika, żeby móc wykorzystać te dane do wyliczania kiedy jaki post jest popularny a także spersonalizowanych sugestii jak to jest na yt.

#programowanie #php #bazydanych #webdev #symfony
  • 23
2.4mln, czy to nie czasem za dużo będzie?


@ElGovanni: Zależy. Posiadanie danych kosztuje więc wszystko zależy od tego czy Cię na to stać. Na przykład w jednej z baz danych największe tabele mi mają:

189825406
257863028
265277792
266369058
269627424

rekordów i jakoś muszę z tym żyć bo klienta na to stać i nawet nie chce myśleć o retencji.
@ElGovanni poczytaj o tych hasłach. To architektura. W ogólnym skrócie obecny stan danych zliczając stany poprzednie. Co jakiś czas zrzucasz sobie stan obecny (snapshot) a potem przyrównujesz stany do niego. Poprzednie chowasz gdzieś indziej. Dzięki temu jesteś m.in w stanie przyrócić czy prześledzić dowolny stan z całego życia aplikacji. No i nie chowasz każdego eventu a jedynie altualne... To tak po krótce :)
PS... w całej tej bazie jak widzę mam jakieś 2835622915 rekordów ;)


@maniac777: jak duże to mogą być koszta bo myślę, że po podliczeniu innych tabeli (komentarze, głosy itd.) wyjdzie mi 1/10 tego w rok xD

@npsr: o cholipka, będzie to można wprowadzić już na istniejącej bazie? Chce na razie zrobić mvp a najwyżej później wgłębię się w tą tematykę ( ͡° ʖ̯ ͡°)
@ElGovanni: Zależy czy Ci te rekordy potrzebne, sa takie scenariusze, gdzie warto zapisywać kolejne zdarzenia ( czyli to co próbujesz zrobić, każdy rekord symbolizuje zdarzenie ), a sa takie scenariusze, gdzie można po prostu walnac sobie jedno pole gdzies i incrementa.
@ElGovanni: ja takie coś zrobiłem klientowi, bo chciał. baza powoli puchnie, co widać najbardziej w backupach, ale tragedii nie ma.

id visit_id perm_id user_id nsl_subscriber created_date uri client_ip
SELECT count( * )
FROM usersniff
WHERE created_date > '2017-01-01'
AND created_date < '2017-02-01';
result: 35961

-- 2378908 total

od 2012 roku około 350MB
jak widzę w podobnych gotowych pluginach, gdzie np. url jest referowany zamiast tekstu, to dla tych samych danych zajmuje
@ElGovanni: wszystko można, ale wiadomo: lepiej robić porządnie od początku :) Jedyne co w tym wypadku jest Ci tak na prawdę potrzebne, to przestawienie myślenia na eventy :) Poza tym no rocket science. My mamy 30 Giga bazy danych i po przejściu na CQRS+ES skok wydajnościowy był grubo ponad oczekiwania :)
jak duże to mogą być koszta


@ElGovanni: a to radze skonsultowac z cennikiem i uslugami Twojego hostingu :) to bedzie troche wiecej I/O, wiecej danych i wieksze backupy. Sugeruje tez na poczatku ustalic sobie jak dluga historie planujesz trzymsc.
@ElGovanni: Jeszcze się dorzucę do obliczeń. Zakładając, że będziesz miał w tej tabeli kolumny: PK, userId, datetime, articleId. Jeśli tylko jesteś w stanie zjechać do takiego stanu i jeśli dobrze liczę to masz 20 bajtów na rekord. Czyli przy 2,4 mln będziesz miał czystych danych zaledwie 50 MB + mniej niż 50 MB jak pozakładasz na to indeksy.
Za bardzo starasz się zrobić wszystko perfekcyjnie i schodzisz do zbyt niskiego poziomu
@cypo: @npsr: Okej dzięki, poczytam o tym po skończeniu mvp.

@lolen: Zacząłem już bazę w sql bo kiedyś miałem problem z tym mogodb w symfony, ciągle chodzi mi to po głowie ale nie mogę tego frameworka pod tę bazę ogarnąć.

@maniac777: to póki co odpada xD

@handler: Zależy jak dla kogo ^^

@stash: To moja pięta achillesowa, mam to przez c++ przy którym miałem fobię żeby
fobię


@ElGovanni: Chyba miałeś na myśli manię.
Jeśli chodzi o sam temat czasu potrzebnego później na optymalizację. To masz całkowitą rację. Może to zająć sporo więcej niż pierwotnie napisane rozwiązanie + napisanie dobrego rozwiązania + stała niewiadoma. Spróbuj pisać pewne elementy tak żeby były niezależnymi komponentami i jak będzie potrzeba ich przepisania to będziesz mógł to zrobić sam nie burząc całego projektu albo będziesz w stanie to wydelegować żeby ktoś to
@lolen: wiem, postępowałem zgodnie z tą dokumentacją tylko później bundle zaczęły swoją własną walkę i nie chciały działać z mongo :/

@stash: u mnie to już przekształciło się w fobię bo szukałem sposobu żeby zaoszczędzić każdego bajta :D
Myślę, że właśnie tak piszę więc może nie będzie problemu z modernizacją bazy.

Dzięki wszystkim za udział.