2016-01-06 3 views
0

Pour l'un de nos services SaaS, nous étudions quelle base de données utiliser pour la reconfiguration.Quel type de DB (relationnel/NoSQL et quel type) choisir pour un cas complexe

Notre solution actuelle utilise MySQL et crée une base de données distincte pour chaque nouveau client. La structure actuelle (mondiale) est:

- globaldb.globaltable 
    => some global data shared with all customers 
    => big 
    => it would be an option to flatten this data in the customerdb.tablewithreportlines, but this increases the size quite a bit 

- customerdb.tablewithstaticdata 
    => joins with `globaltable` 
    => searched on several columns 
    => no group by 
    => writes throughout the day, in the thousands 
    => reads on request by the customer via the application, so not continuesly 
    => can be big per customer, serveral GBs 

- customerdb.tablewithreports 
    => searched on several columns 
    => writes throughout the day, but only in the tens 
    => reads on request by the customer via the application, so not continuesly 
    => quite small 

- customerdb.tablewithreportlines 
    => joins with `tablewithreports` 
    => joins with `globaltable` 
    => most columns are 'searchable' 
    => most columns are 'groupable' 
    => writes throughout the day, in the thousands but only when processing the `tablewithreports` lines 
    => reads on request by the customer via the application, so not continuesly 
    => can be big per customer, serveral GBs 

Les données customerdb est jamais Mise à jour, mais seulement Inséré (et parfois Deleted).

Nous nous préparons à une croissance rapide et avons besoin d'une structure prête pour cela. Il est acceptable d'ajouter de nouvelles instances (si nécessaire) manuellement.

Nous avons déjà eu une configuration MySQL avec une très grande quantité de tables (et de bases de données) pour un projet de test. Ce projet a échoué car le serveur dépassait ses gestionnaires de fichiers maximum pour les tables MySQL. C'était autour de + -500.000 tables. Ce nouveau projet devra certainement pouvoir gérer 500 000 clients et donc 1,5 million de tables (avec cette structure actuelle).

La taille moyenne par base de données client est de + - 7,5Mb. Non à beaucoup, mais il est assez répandu que les clients multiples ont plusieurs Go dans leur base de données.

J'ai cherché SO et Google pour trouver une situation correspondante, mais je n'ai pas réussi à la trouver.

À ce stade, nous sommes ouverts à toute suggestion, à la fois relationnelle, NoSQL ou une combinaison que nous faisons une re-conception complète.

Question Quelle est la meilleure base de données pour ce cas d'utilisation?

PS: ceci est mon premier poste si je suis mon pardonne incomplet

Répondre

0

Je suggère d'envisager d'utiliser une base de données commune pour tous les clients. Cela réduit radicalement le nombre de tables.

Les systèmes de gestion de base de données n'ont pas été conçus pour ce vaste ensemble de bases de données ou de tables.

Habituellement, une table est une entité représentant une collection d'objets de même nature. Donc, tous les objets de même nature (comme les clients dans votre cas) devraient être placés dans une table plutôt que d'avoir une table séparée pour chaque client.