2009-09-23 32 views
0

Je construis une webapp qui a les caractéristiques suivantes:Se soucier de l'évolutivité d'un nouveau site

  1. Il a seulement un petit nombre de pages, à la maison, contactez-nous, à propos, singup, etc.
  2. Chaque utilisateur a une page basée sur jquery qui lui permet de glisser/déposer/manipuler des éléments DOM.
  3. Lorsqu'un utilisateur a fini de manipuler des éléments, il peut cliquer sur Enregistrer et les éléments sont envoyés via JSON à un script PHP sur le serveur. Ils peuvent également charger JSON précédemment sauvegardé.

Donc essentiellement: très peu de pages avec 90% d'informations statiques. Une page avec le travail côté client et potentiellement beaucoup de GETting/POSTing de JSON.

J'ai construit un POC avec PHP/Smarty, jQuery et mySQL. Les détails de l'utilisateur sont stockés dans mySQL, tout comme les données JSON. Les pages Web sont mises en cache par Smarty sur le disque. Maintenant, je pense à l'évolutivité et la question évidente est de savoir si je devrais stocker les données JSON souvent changées dans mySQL ou devrais-je utiliser memcacheDB ou un autre magasin de valeurs-clés? Souhaitez-vous aller à l'option mySQL facile ou introduire un magasin de valeur-clé maintenant ou attendez-vous pour voir si le problème d'échelle se pose? Suis-je réaliste pour atteindre un point où mySQL est le goulot d'étranglement?

Je prévois d'héberger ce sur Slicehost pour commencer, puis le déplacer si nécessaire.

Répondre

1

La question est, y aurait-il des recherches basées sur ces valeurs ou non? Y aura-t-il des mises à jour pour des valeurs spécifiques au niveau de la base de données ou non? Les données sériallisées ou json seront plus rapides et plus efficaces (stockage) si tout ce que vous faites est de tirer toute la chaîne sans avoir besoin d'interroger ou de modifier il. Cependant, en fonction de la façon dont vous effectuez la mise à l'échelle, vous pouvez conserver une structure clé/valeur avec une représentation de données à plat à des fins de recherche.

Pensez également à utiliser apache AB pour effectuer des analyses comparatives et obtenir des idées sur la manière dont vos modifications affectent votre sortie simultanée.

Bonne chance :)

+0

Aucune recherche, juste un stockage direct. Générez du JSON en utilisant jQuery, stockez tel quel dans mySQL, puis récupérez plus tard à partir de DB, renvoyez-le au côté client et jQuery parcourt JSON. –

+0

Ensuite, l'économie de JSON sera la moins utilisée et le meilleur modèle de stockage. (même si cela peut prendre plus de place, mais vous laissera moins de lignes dans la table à traiter, d'où un plus petit fichier d'index et des récupérations plus rapides). – Mohammad

1

En ce qui concerne le JSON, cela ne fera pas de différence: je ne vois pas comment vous pouvez optimiser le stockage de ces données. Je pense que la question se résume à "Quelle est la complexité des données de l'utilisateur?". S'il y a un graphe social massif connecté avec des clés étrangères RDBMS, et qu'il est trop difficile de mapper ces données à un magasin de valeurs-clés, je préfère ne pas faire l'effort maintenant. Cependant, si les données utilisateur sont simplement des informations de profil plates, je préfère passer à un magasin de valeurs-clés maintenant, plutôt que plus tard, avant d'utiliser trop de fonctionnalités SGBDR.

+0

Merci pour la réponse. Je vais toujours avoir des données utilisateur dans mySQL - c'est juste des profils simples. Ma principale préoccupation était de savoir si le stockage + récupération des chaînes contenant les objets JSON serait plus rapide en utilisant clé/valeur magasin. –

+0

Hm. Je n'y ai pas assez réfléchi - je me suis concentré davantage sur les données de profil utilisateur. Vous pouvez essayer le profilage ... avec des chaînes JSON, je ne sais pas pourquoi le magasin de valeurs-clés devrait être beaucoup plus rapide. – artagnon