2011-08-27 5 views
19

Je tente moi-même de réaliser mon premier projet de base de données à grande échelle. J'ai un mysql db myisam sur le serveur 1 avec une application php consommant une grande quantité de données diverses. J'ai mysql myisam sur le serveur 2 avec l'application php sélection et affichage des données.Conseils et techniques de réplication Muzak

Je veux répliquer ces données sur le serveur 2.

Questions:

  1. Dois-je changer le serveur 1 db mysql InnoDB
  2. Pouvez-vous répliquer server1 InnoDB à server2 myisam
  3. I stocker des médias comme des blobs avec l'intention d'utiliser le cache pour décharger le stress sur le serveur en direct. Dois-je utiliser le stockage de système de fichiers et rsync.
  4. Des conseils généraux d'autres personnes expérimentées?

Répondre

26

Voici ce que je suggère en fonction de mon expérience.

  1. Vous pouvez utiliser un type de moteur (MyISAM ou InnoDB) pour les deux serveurs. Si vous mélangez les deux moteurs, vous risquez d'avoir des interblocages, des problèmes de transaction, etc ... et les corriger peut être douloureux. J'ai eu des problèmes avec InnoDB -> MyISAM. Maintenant, j'ai utilisé MyISAM sur tous les serveurs. Pour stocker des médias (tels que des images, des vidéos ou des documents), vous pouvez créer un NFS et monter un dossier comme/usermedia/auquel accèdent les deux serveurs. Vous n'avez donc pas besoin de rsync à chaque fois. En outre, vous pouvez enregistrer les métadonnées ou les informations sur les médias dans la base de données pour référence et où le fichier est enregistré sur le disque. Remarque: l'utilisation d'un blob pour enregistrer des fichiers peut être bonne selon le support. Si vous avez un fichier d'environ 1 Go, ce n'est pas une bonne idée de sauvegarder sur la base de données par exemple).

  2. Utilisez un système de mise en cache pour récupérer des données (telles que memcached). Par exemple, si vous demandez des données et que vous devez les afficher à l'utilisateur, regardez d'abord dans le cache. Si ce n'est pas dans le cache, interrogez la base de données, enregistrez-le dans le cache et affichez. La prochaine fois que la même information est demandée, vous ne la demanderez pas au serveur mais à la mémoire. Cette solution permettra d'éviter de nombreux appels sur le serveur de base de données, ce qui améliorera les performances.

Faites-moi savoir si vous avez besoin d'aide supplémentaire.

+0

Merci. Les fichiers multimédias sont des images. 3 versions de la même image à différentes tailles. La taille du fichier varie d'environ 10k à 80k et ne devrait pas être beaucoup plus que cela. Dans cet esprit, ça va encore être un énorme db en taille. Est-ce important? Ou est mysql assez dur pour le travail. Bien sûr memcached sera utilisé sur le côté vivant. – user915831

+0

J'aime l'idée de nfs. Mais comme il s'agit d'un projet personnel, mes fonds sont limités. J'ai un bon serveur dédié en direct. Dans un centre de données avec bande passante non mesurée et connexion t1. J'ai un serveur interne dans le bureau mais est contraint par la connexion en amont d'Internet qui est environ 512up 20mbs vers le bas. Donc, avec cette iconnection, la connexion nfs sur le serveur interne ralentira le logiciel consommateur - non? – user915831

+0

Les serveurs se trouvent-ils dans le même centre de données? peuvent-ils se parler sans VPN? vérifier ces liens http://how-to.linuxcareer.com/how-to-configure-nfs-on-linux. Vous pouvez peut-être commencer à stocker des images dans la base de données, car elles sont petites, puis migrer vers la solution NFS si vous effectuez une mise à niveau vers un média plus grand. –

23

Je recommanderais InnoDB (pour les transactions, le verrouillage de ligne et non le verrouillage de table) et redis comme la mise en cache très rapide et efficace