2 votes

Migrer de Cloud SQL vers DataStore

Je suis en train de créer une application où j'ai besoin de créer des flux de messages. Pour l'instant, j'utilise App Engine Standard et une instance Cloud SQL. db-n1-standard-1 qui est basé sur MySQL Mais je remarque que c'est très cher. L'application est en mode production et le prix du premier mois est beaucoup plus élevé que ce à quoi je m'attendais. La chose la plus coûteuse dans Cloud SQL est instance heures taux Donc, je décide de le migrer sur un datastore.

J'ai trois tables, 1- utilisateurs 2- postes 3- commentaires Et chaque table est ronde 10 Millions Des rangs. Messages et commentaires Les tables sont se développent très rapidement, 100 millions de lignes sont attendues.

Table des utilisateurs

user_id         name        email           phone
--------------------------------------------------
u123            Abc         abc@m.com       123456
u124            Cde         cde@m.com       789065
u786            Qwe         qwe@m.com       754599
 .               .              .               .
 .               .              .               .
 .               .              .               .

Table des postes

post_id         user_id         type        src                 date
------------------------------------------------------------------------
p098            u123            img         path/to/file        13-3-17
p456            u123            vid         path/to/file        14-3-17
p239            u124            img         path/to/file        15-3-17
 .               .               .              .                   .
 .               .               .              .                   .
 .               .               .              .                   .

Tableau des commentaires

cmnt_id         post_id         user_id         comment
--------------------------------------------------------
m392            p098            u123            Some Text
m234            p098            u786            Some Text
m324            p456            u123            Some Text
 .               .               .                .
 .               .               .                .
 .               .               .                .

Comme vous pouvez le constater User peut poster un ou plusieurs posts et unique post a un ou plusieurs comments

J'ai besoin d'obtenir postes ainsi que des données commentaires Je sais que je dois utiliser JOIN pour cela. Et je peux facilement l'utiliser dans Cloud SQL car il est basé sur MySQL.

Ces trois tables ont une relation entre elles et comme je le sais, Cloud SQL est une base de données relationnelle mais pas DataStore.

J'ai l'idée de convertir ces tables en DataStore.

1- Créer une entité comme Users et sauvegarder tous les enregistrements des utilisateurs à cet endroit 2- Créer une entité comme Posts et sauvegarder tous les enregistrements de messages à cet endroit 3 - Créez l'entité comme Comments et sauvegarder tous les enregistrements de commentaires à cet endroit

Post id est toujours je sais pour quel post je dois obtenir des données.

Par exemple, j'ai besoin d'afficher des données sur l'identifiant p098 J'utilise Java Je décide de créer deux threads Le premier fil obtient post données de Posts Entité et deuxième fil obtient comment données de Comments Entité. Puis je fusionne ces deux ensembles de données en utilisant java pour générer le même résultat que JOIN Comme MySQL Parce que je pense que DataStore n'est pas autorisé JOINS

J'ai besoin de quelques suggestions.

  1. Est-ce un bon moyen de le faire ?
  2. Lequel fournit la meilleure performance dans cette situation ?
  3. Si des milliers d'utilisateurs( Grand nombre d'utilisateurs ) accède à Messages et commentaires données en même temps lequel des deux peut le mieux gérer ?
  4. Quel est l'effet sur les prix si je migre de Cloud SQL vers DataStore dans cette situation ? situation ?
  5. Si votre application a besoin d'une base de données continue, l'instance SQL doit être exécutée en continu, ce qui entraîne un coût élevé. ce qui rend le coût élevé, n'est-ce pas ? Par exemple dans mon application, chaque utilisateur qui ouvre l'application doit montrer les messages s'il y a un grand nombre d'utilisateurs, je pense que l'instance SQL ne s'arrête jamais. Ce qui signifie qu'elle fonctionne 730 heures en un mois.
  6. Une recommandation ?

0voto

Sébastien Loix Points 271

Je mettrais les Commentaires comme entité enfant des Messages. La requête par Ancêtres est plus rapide que les autres requêtes pour votre Join.

Je pourrais aussi avoir Posts comme entité enfant de User

On se retrouve donc avec une structure du type :

| User, 123 | --> | Post, 456 | --> | Comment, 789 | (Grand Dad) (Dad) (Child)

EDIT : Tim Hoffman a raison, Comment devrait être l'enfant de "User" et non "User > Post".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X