2010-12-01 31 views
0

Je travaille sur un système de sauvegarde/synchronisation de base de données utilisateur en ligne pour une application flashcard populaire basée sur SQLite; C'est assez grand - nous pourrions très rapidement atteindre 100 millions d'enregistrements de cartes-éclair individuels ou plus (10 000 utilisateurs, 10 000 cartes chacun) - et nous devons concevoir le système avec ce genre d'évolutivité à l'esprit. Mais nous ne sommes pas vraiment dans le domaine des logiciels basés sur le Web, et au moins au début, nous ne prévoyons pas d'utiliser une telle interface, sauf pour l'administration de compte - toutes les manipulations réelles des données utilisateur se produiraient hors ligne.Stockage/synchronisation en ligne de grandes bases de données utilisateur iPhone: fonctionne sur serveur ou sur appareil?

Il semble donc que nous avons deux options de base sur la façon de mettre en œuvre cette:

  • la synchronisation Perform sur le serveur; stocker toutes les données des utilisateurs dans une base de données MySQL (ou un groupe d'entre eux à mesure que nous évoluons) et télécharger/télécharger des listes de modifications uniquement.

  • Effectuez la synchronisation localement; téléchargez la dernière version de la base de données à partir du serveur, recherchez/appliquez les modifications sur le périphérique, puis téléchargez la base de données fusionnée.

Il semble que l'option de synchronisation locale signifierait beaucoup moins de travail de programmation et les coûts d'hébergement beaucoup plus bas sur notre fin, mais cela signifierait aussi beaucoup plus l'utilisation de la bande passante pour nos utilisateurs - probablement quelque chose de l'ordre de 2 4 Mo pour chaque opération de synchronisation contre quelques dizaines de K pour une synchronisation Web.

Est-ce que quelqu'un a l'impression que l'une de ces options est nettement meilleure que l'autre? Y a-t-il une autre façon de faire cela que nous n'avons pas envisagée?

Merci.

Répondre

0

Je pourrais être loin avec la façon dont cela fonctionne mais, comme c'est la synchronisation, pourquoi la copie locale de la base de données ne serait pas capable d'enregistrer une liste de changements qui peuvent ensuite être répliqués sur le serveur? Cela fonctionne uniquement pour un seul périphérique, bien sûr, ne synchronisant pas plusieurs périphériques avec le même ensemble de données. Les modifications peuvent être notées de différentes manières: par exemple, vous pouvez vérifier les enregistrements sur l'iPhone et les remettre à nouveau lors de la synchronisation, puis télécharger ceux qui ont changé, les suppressions doivent être enregistrées séparément.

+0

Cette partie n'est pas ce qui m'inquiète, en fait, ma grande préoccupation est de gérer efficacement autant d'enregistrements sur le serveur; ce ne serait pas un petit projet MySQL, et si les choses augmentaient, nous pourrions facilement entrer dans le territoire de cluster/shard. Considérant que si nous avons juste récupéré/a écrit les fichiers de base de données entiers nous pourrions probablement nous débrouiller avec une petite instance EC2 et ce que par les normes S3 est une quantité minuscule de stockage de fichiers. – Ertebolle