2010-12-14 59 views
1

Le problème est un peu similaire à twitter/facebook:Mise à l'échelle d'un modèle suiveur

  • suiveurs et suivants
  • utilisateurs ajouter des articles

vous ensuite voir les articles ajoutés par tous les gens que vous êtes Suivant. Problème A: comment conserver la requête pour les éléments ajoutés par les personnes que vous suivez fonctionne bien avec les ensembles de données en croissance?

Problème B: nous observons un trafic géographiquement dispersé. grande base d'utilisateurs aux Pays-Bas et au Brésil. toute solution devrait probablement permettre des bases de données dans plusieurs centres de données.

Nous exécutons une pile django/python. Déjà en cours de mise en cache du serveur Edge. (Les utilisateurs anonymes obtiennent la version mise en cache, la version de l'utilisateur connecté est exécutée par un service d'analyse de modèle de second niveau)

Répondre

1

Problème A: comment conserver la requête pour les éléments ajoutés par les personnes que vous suivez correctement avec les ensembles de données croissants?

en commençant par un ensemble de données de (qui sont mes abonnés/qui suis-je); on pourrait sauvegarder ces valeurs sous forme de tuples et les segmenter entre plusieurs bases de données SQL (bien que je doute que la vraie segmentation soit vraiment nécessaire même pour les bases de données de taille de twitter). Cela donnerait la liste des personnes suivies. Deuxièmement, une table pour suiveurs-> articles, triés par suiveur pourrait être facilement interrogé; et également segmenté si nécessaire étant donné des ensembles de données gigantesques.

Problème B: nous observons un trafic géographiquement dispersé. grande base d'utilisateurs aux Pays-Bas et au Brésil. toute solution devrait probablement permettre des bases de données dans plusieurs centres de données.

on pourrait désigner une base de données maître (cluster) et une base de données esclave (cluster), et répliquer les données du maître vers l'esclave. Cependant, cela implique que les données sont toujours enregistrées dans la base de données master. les requêtes de données peuvent être effectuées localement.

Une autre option consiste à exécuter la base de données (clusters) dans une configuration maître-maître; mais c'est généralement plus de problèmes que ça vaut la peine.