"Maintenant, comment résoudriez-vous le problème décrit ?"
Avec des fichiers plats simples.
Voici pourquoi
Vous avez 2.000.000 entités. Partition basée sur le numéro d'entité :
level1= entity/10000
level2= (entity/100)%100
level3= entity%100
Chaque fichier de données est level1/level2/level3/batch_of_data
Vous pouvez ensuite lire tous les fichiers d'une partie donnée du répertoire pour renvoyer des échantillons à traiter.
Si quelqu'un veut une base de données relationnelle, chargez les fichiers pour un entity_id donné dans une base de données pour leur utilisation.
Modifier Sur les numéros de jour.
-
Le
date_id
/entity_id
la règle d'unicité n'est pas quelque chose qui doit être manipulé. Il est (a) trivialement imposé aux noms de fichiers et (b) non pertinent pour l'interrogation. -
Le
date_id
"rollover" ne veut rien dire - il n'y a pas de requête, donc il n'est pas nécessaire de renommer quoi que ce soit. Ledate_id
devrait simplement croître sans limite à partir de la date d'époque. Si vous souhaitez purger les anciennes données, supprimez les anciens fichiers.
Étant donné qu'aucune requête ne repose sur date_id
, il n'y a jamais rien à faire avec. Il peut s'agir du nom de fichier pour tout ce qui compte.
Pour inclure le date_id
dans le jeu de résultats, écrivez-le dans le fichier avec les quatre autres attributs qui se trouvent dans chaque ligne du fichier.
Modifier sur ouverture/fermeture
Pour l'écriture, vous devez laisser le(s) fichier(s) ouvert(s). Vous effectuez des vidages périodiques (ou fermez/rouvrez) pour vous assurer que tout va bien sur le disque.
Vous avez deux choix pour l'architecture de votre écrivain.
-
Ayez un seul processus "rédacteur" qui consolide les données des différentes sources. Ceci est utile si les requêtes sont relativement fréquentes. Vous payez pour la fusion des données au moment de l'écriture.
-
Avoir plusieurs fichiers ouverts simultanément pour l'écriture. Lors de l'interrogation, fusionnez ces fichiers en un seul résultat. Ceci est utile car les requêtes sont relativement rares. Vous payez pour la fusion des données au moment de la requête.