Nous construisons une application iOS avec Parse.com, mais ne pouvons toujours pas trouver la bonne façon de sauvegarder efficacement les données. En tant que prémisse, nous avons et aurons beaucoup de rangées de magasins de données. Supposons que nous ayons une classe avec 1 million de lignes, supposons que nous l'ayons sauvegardée, puis que nous voulions la ramener à Parse, après une situation dangereuse (comme la perte de données sur la production).Méthode de sauvegarde de données réaliste pour Parse.com
Les quelques solutions que nous avons examinées sont les suivantes:
1) Utiliser un serveur externe pour la sauvegarde
BackUp: - utiliser l'API REST pour sauvegarder en permanence des données sur un serveur MySQL (nous avons choisi A) - recréer des objets JSON à partir de la sauvegarde MySQL et utiliser l'API REST pour renvoyer à Parse. Supposons que nous utilisions l'opération par lots qui permet de créer 50 objets simultanés avec une requête, et supposons que cela prend 1 seconde pour chaque requête, 1 million d'ensembles de données prendront 5,5 heures pour être transférés dans Parse. B) - recréer un fichier JSON à partir de la sauvegarde MySQL et utiliser le tableau de bord pour importer les données manuellement. Nous avons juste essayé avec 700 000 fichiers d'enregistrements avec cette méthode: il a fallu environ 2 heures pour que l'indicateur de chargement s'arrête et affiche le nombre de lignes dans le volet gauche, mais il ne s'ouvre plus dans le volet droit ") et il est plus de 6 heures depuis le début du téléchargement. Donc, nous ne pouvons pas compter sur 1.b, et 1.a semble prendre trop de temps à se remettre d'une catastrophe (si nous avons 10 millions d'enregistrements, ce sera comme 55 heures = 2,2 jours).
Maintenant, nous pensons à ce qui suit:
2) répliquent en permanence les données à une autre application
Créer ce qui suit dans Parse: - App Production: A - App réplication: B Ainsi, alors que A est en production, chaque requête sera dupliquée vers B (en utilisant constamment le job d'arrière-plan). L'inconvénient est bien sûr qu'il va manger jusqu'à la limite de rafale de A car il va simplement doubler la quantité de requête. Donc, pas idéal de penser à l'échelle. Ce que nous voulons, c'est quelque chose comme AWS RDS qui donne une option pour sauvegarder automatiquement tous les jours. Je me demande comment cela pourrait être difficile pour Parse car il est basé sur AWS infra.
S'il vous plaît laissez-moi savoir si vous avez une idée à ce sujet, sera heureux de partager savoir-comment.
P.S .:
Nous avons remarqué un défaut important dans l'idée 2) ci-dessus.
Si nous répliquons à l'aide de l'API REST, tous les objets de toutes les classes seront modifiés, de sorte que toutes les relations 1to1 ou 1toMany seront rompues. Nous pensons donc à mettre un uuid pour chaque classe d'objet.
Y a-t-il un problème avec cette méthode? Une chose que nous voulons atteindre est query.include ("ObjectName") (ou Obj-C "includeKey"), mais je suppose que ce ne sera pas possible si nous ne basons pas notre logique d'application sur objectId .
Vous cherchez un moyen de contourner ce problème; mais la gestion par uuid sera-t-elle fonctionnelle dans la logique de Parse's Datastore?
Le fait que vous n'avez jamais perdu de données ne signifie pas que vous ne perdrez jamais de données. –
Nous faisons aussi des sauvegardes, au cas où cela arriverait. Ce ne serait pas sur vous, de restaurer dans ce cas (mais il est toujours bon de garder des sauvegardes, même si ce n'est qu'à d'autres fins, comme le chargement/travail avec les données ailleurs.) – Fosco
Salut Fosco, merci pour votre suivi. Veuillez clarifier les points suivants: au cas où nous perdrions nos données sur Parse DataStore (par des erreurs humaines ou des attaques de hackers ou pour toute autre raison), pourrions-nous, par exemple, vous envoyer un e-mail et vous demander une récupération immédiate? À quelle fréquence effectuez-vous une sauvegarde sur DataStore (quel âge aurait cet ensemble de données récupéré?). Si nous ne les connaissons pas, je ne pense pas que ce soit quelque chose sur quoi les développeurs peuvent compter, alors s'il vous plaît soyez plus clair sur les détails. – dcc