7
votes

Quelle est la meilleure façon de stocker des données de tendance?

Je construis actuellement une application dans laquelle j'importe des données statistiques pour (actuellement) environ 15 000 produits. À l'heure actuelle, si je devais conserver une table de base de données pour chaque jour statistiques d'une source, il serait augmenté de 15 000 rangées de données (disons 5-10 champs par ligne principalement flottants, int) par jour. Évidemment équivalent à plus de 5 millions d'enregistrements par an dans une table.

Cela ne me concerne pas tant la pensée d'apporter des données d'autres sources (et d'augmenter ainsi la taille de la base de données de 5 millions d'enregistrements pour chaque nouvelle source).

Maintenant, les données sont des données statistiques / tendances basées sur une tendance et auront fondamentalement 1 écriture par jour par enregistrement et de nombreuses lectures. Aux fins des rapports de la mouche et des graphiques, j'ai besoin d'un accès rapide aux sous-ensembles des données basées sur des règles (chaînes de date, de valeur de valeur, etc.).

Quelle question est que ma question est la meilleure façon de stocker les données (tables MySQL Innodb) ou y a-t-il un meilleur moyen de stocker et de gérer des données statistiques / tendances?

Autres options que j'ai jetées à ce stade: 1. Plusieurs bases de données (un par produit), avec des tableaux distincts pour chaque source de données à l'intérieur. (Par exemple, base de données: Produits, Table (s): Source_a, Source_B, Source_C) 2. Une base de données, plusieurs tables (une pour chaque source / source de données) (C'est-à-dire la base de données: produits, table (s): Produit_sourcea, ProduitsA_Sourceb, etc.) 3. Tous les Informations sur les produits factuels ou spécifiques dans la base de données et tous les données statistiques dans CSV, XML, JSON, (fichiers plats) dans des répertoires distincts.

Jusqu'à présent, aucune de ces options n'est très gérable, chacune a ses avantages et ses inconvénients. J'ai besoin d'une solution raisonnable avant d'entrer dans l'étape alpha du développement.


0 commentaires

3 Réponses :


2
votes

Vous pouvez essayer de faire usage d'une base de données basée sur une colonne. Ces types de bases de données sont bien meilleurs dans les requêtes analytiques du type que vous décrivez. Il existe plusieurs options:

http://fr.wikipedia.org/wiki/column-oriented_dbms < / p>

Nous avons eu une bonne expérience avec INFINIDEB:

http://infinidb.org/

et Infobright a l'air bien aussi:

http://www.infobright.com/

InfiniDB et Infobright ont des éditions de communauté open source gratuites. Je vous recommanderais donc de les utiliser pour obtenir des points de repère sur les types de prestations de performance que vous pourriez obtenir.

Vous voudrez peut-être aussi consulter votre partitionnement de vos données pour améliorer les performances.


1 commentaires

J'ai trouvé un PDF qui parle de MySQL à l'aide d'un moteur basé sur une colonne: forge. mysql.com/w/images/5/54/mysqlcolumnDatabases.pdf , je vais examiner cette option d'autres, je n'avais pas entendu parler du stockage basé sur la colonne avant, cela pourrait être ce que je cherche.



2
votes

C'est un peu dépendant de vos données, et le type d'agrégations / tendances que vous souhaitez courir. La plupart des bases de données relationnelles fonctionnent parfaitement pour ce type de données chronologiques. Même avec des milliards d'enregistrements, une indexation appropriée et un partitionnement peuvent effectuer des travaux de travail rapides de trouver les archives dont vous avez besoin. DB est comme Oracle, MySQL, SQL-Server tomber dans cette catégorie.

permet de dire que les produits avec lesquels vous travaillez sont des stocks et pour chaque stock que vous obtenez un nouveau prix chaque jour (un cas très réaliste). De nouveaux échanges, stocks, fréquences commerciales augmenteront ces données de manière exponentielle assez rapidement. Vous pouvez toutefois partitionner les données par échange. Ou région.

Divers outils de renseignement de l'entreprise sont également en mesure d'aider, ce qui revient effectivement à pré-agréger les données avant la récupération. Ceci est essentiellement une base de données orientée colonne, comme on l'a suggéré. (Les entrepôts de données et les structures OLAP peuvent aider à masser et à enregistrer des ensembles de données à l'avance).

Semblable à l'idée de l'entreposage de données, s'il s'agit simplement d'une question des agrégations prenant trop de temps, vous pouvez travailler les agrégations du jour au lendemain dans une structure plus rapide pour interroger. Dans mon exemple précédent, vous n'avez peut-être pas seulement de récupérer de gros morceaux de données très rarement, mais plus souvent, une agrégation telle que 52 semaines. Vous pouvez stocker la grande quantité de données brutes en un format, puis chaque nuit, vous avez un travail de travail que ce dont vous avez besoin dans une table plutôt que des milliers de points de données par stock, a maintenant 3 ou 4.

Si les tendances que vous suivez sont vraiment sur la place ou des algorithmes complexes, une solution BI à part entière peut être une autre chose à étudier afin que vous puissiez utiliser des algorithmes antérieurs et d'exploitation antérieurs pré-construits.

Si les données ne sont pas très structurées, vous pouvez avoir une bonne chance avec une base de données NOSQL comme Hadoop ou Mongo, bien que, bien que mes connaissances sur les bases de données soient davantage axées sur les formats relationnels.


0 commentaires

0
votes

Modification des données relatives à des graphiques non relationnels, tels que des graphiques, convertissant des données à des formes mieux et organisées telles que l'utilisation des martons de données et des lacs de données. En utilisant des algorithmes d'extraction de données. Traitement des données ensemble en utilisant des techniques telles que la carte Réduire. Convertir les propriétés acides en basique.


1 commentaires

Votre réponse pourrait être améliorée avec des informations justificatives supplémentaires. S'il vous plaît Modifier pour ajouter des détails supplémentaires, tels que les citations ou la documentation, de sorte que d'autres puissent confirmer que votre réponse est correcte. Vous pouvez trouver plus d'informations sur la façon d'écrire de bonnes réponses dans le centre d'aide .