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.
- Est-ce un bon moyen de le faire ?
- Lequel fournit la meilleure performance dans cette situation ?
- 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 ?
- Quel est l'effet sur les prix si je migre de Cloud SQL vers DataStore dans cette situation ? situation ?
- 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.
- Une recommandation ?