2011-08-27 14 views
19

Sam próbuję swojego pierwszego dużego projektu bazy danych o dużej skali. Mam myisam mysql db na serwerze 1 z aplikacją php zużywającą dużą ilość różnych danych. Mam mysql myisam na serwerze 2 z php app wybierając i wyświetlając dane.Porady i techniki replikacji firmy Muzak

chcę powielać te dane na serwerze 2.

Pytania:

  1. należy zmienić Server 1 mysql db do InnoDB
  2. można replikować server1 InnoDB do server2 MyISAM
  3. I "przechowuję media jako obiekty blob z intencją użycia pamięci podręcznej do odciążenia serwera live. Czy powinienem używać pamięci masowej systemu plików i rsync.
  4. Jakieś ogólne porady od innych doświadczonych osób?

Odpowiedz

26

Oto, co proponuję na podstawie mojego doświadczenia.

  1. Można użyć jednego typu silnika (MyISAM lub InnoDB) dla obu serwerów. Łączę oba silniki, możesz dostać zakleszczenia, problemy z transakcjami itp., A czas ich naprawy może być bolesny. Miałem problemy jakiś czas temu z InnoDB -> MyISAM. Teraz użyłem MyISAM na wszystkich serwerach.

  2. Do przechowywania multimediów (takich jak obrazy, wideo lub dokumenty) można utworzyć NFS i zamontować folder taki jak/usermedia /, do którego mają dostęp oba serwery. Dlatego nie musisz rsync za każdym razem. Ponadto można zapisać metadane lub informacje o nośnikach w bazie danych w celach informacyjnych i gdzie plik jest zapisywany na dysku. Uwaga: używanie pliku blob do zapisywania plików może być dobre w zależności od nośnika. Jeśli masz plik, który ma około 1 gig, może nie być dobrym pomysłem, aby zapisać na przykład w bazie danych).

  3. Użyj systemu buforowania do pobierania danych (np. Memcached). Na przykład, jeśli żądasz danych i chcesz je wyświetlić użytkownikowi, najpierw zajrzyj do pamięci podręcznej. Jeśli nie znajduje się w pamięci podręcznej, przeszukaj bazę danych, zapisz ją w pamięci podręcznej i wyświetl. Następnym razem, gdy te same informacje są wymagane, nie będziesz żądać ich z serwera, ale z pamięci. To rozwiązanie pozwoli uniknąć wielu wywołań na serwerze bazy danych, co poprawi wydajność.

Daj mi znać, jeśli potrzebujesz dodatkowej pomocy.

+0

Dzięki. Pliki multimedialne to obrazy. 3 wersje tego samego obrazu w różnych rozmiarach. Rozmiar pliku wynosi od około 10k do 80 tys. I prawdopodobnie nie będzie to dużo więcej. Mając to na uwadze, nadal będzie to ogromny rozmiar bazy danych. Czy to ma znaczenie? Lub jest mysql wystarczająco trudne do pracy. Oczywiście memcached będzie używany na żywo. – user915831

+0

Podoba mi się pomysł nfs. Ale ponieważ jest to projekt osobisty, moje fundusze są ograniczone. Mam dobry serwer dedykowany na żywo. W centrum danych o niezmiennej przepustowości i połączeniu t1. Mam wewnętrzny serwer w biurze, ale jest ograniczony przez połączenie z Internetem, które ma około 512 jednostek. Tak więc z tą ikoną połączenie nfs na wewnętrznym serwerze spowolni zużywające się oprogramowanie - prawda? – user915831

+0

Czy serwery znajdują się w tym samym centrum danych? czy mogą rozmawiać ze sobą bez VPN? sprawdź ten link http://how-to.linuxcareer.com/how-to-configure-nfs-on-linux. Być może możesz zacząć przechowywać obrazy w bazie danych, ponieważ są one małe, a następnie przejść do rozwiązania NFS, jeśli uaktualnisz do większych nośników. –

23

Polecam InnoDB (dla transakcji, blokowania wierszy, a nie blokowania tabel) i redis jako buforowanie bardzo szybkie i wydajne