Meilleure base de données DataMining
Je suis une occasionnelle programmeur Python qui n'ont travaillé jusqu'à présent avec SQLITE ou MYSQL bases de données. Je suis à l'ordinateur par personne pour le tout dans une petite entreprise, et j'ai commencé un nouveau projet où je pense qu'il est temps d'essayer de nouvelles bases de données.
Département des ventes fait un CSV dump chaque semaine et j'ai besoin de faire un petit script d'application qui permettent à des personnes d'autres départements de mélanger les informations, la plupart lier les enregistrements. J'ai tout cela a résolu mon problème est la vitesse, je suis juste en utilisant des fichiers de texte simple pour tout cela, et sans surprise c'est très lent.
J'ai pensé à l'utilisation de mysql, mais là j'ai besoin de l'installation de mysql dans chaque bureau, sqlite est plus facile, mais elle est très lente. Je n'ai pas besoin d'une base de données relationnelle, juste une façon de jouer avec de grandes quantités de données dans un bon temps.
Mise à jour: je pense que je n'était pas très détaillée au sujet de mon utilisation de base de données permettant d'expliquer mon problème mal. Je suis en train de lire toutes les données de ~900 Mégas ou plus à partir d'un fichier csv dans un dictionnaire Python ensuite de travailler avec elle. Mon problème est le stockage et la plupart du temps de la lecture des données rapidement.
Merci beaucoup!
source d'informationauteur Eric
Vous devez vous connecter pour publier un commentaire.
Résumé
Nous le savons:
Informations manquantes
"get all users who work for departement x"
"get all sales from user x"
Base de données nécessaire
Vous êtes sûr de droit que vous avez besoin d'une base de données pour résoudre votre problème. Le faire vous-même à l'aide de python dictionnaire est difficile. Surtout si votre problème ne peut pas tenir dans la mémoire.
MySQL
Centralisé(architecture Client-serveur) de la base de données est exactement ce dont vous avez besoin pour résoudre votre problème. Laissez les utilisateurs accèdent à la base de données à partir de 1 PC, qui vous gérer. Vous pouvez utiliser MySQL pour résoudre votre problème.
Tokyo Tyran
Vous pouvez également utiliser Tokyo Tyrant pour stocker toutes vos données. Tokyo Tyran est assez rapide et il n'a pas à être stockées dans la mémoire RAM. Il gère l'obtention de données plus efficace(au lieu d'utiliser python du dictionnaire). Toutefois, si votre problème ne peut complètement adaptée à la Mémoire, je pense que vous devriez avoir regarder Redis(ci-dessous).
Redis:
Vous pouvez par exemple utiliser Redis(démarrage rapide en 5 minutes)(Redis est extrêmement rapide) pour stocker toutes les ventes dans la mémoire. Redis est extrêmement puissant et peut faire ce genre de requêtes incroyablement rapide. Le seul problème avec le Redis, c'est qu'il a pour s'adapter complètement à RAMmais je crois qu'il travaille sur ce(nightly build déjà le prend en charge). Aussi, comme je l'ai déjà dit précédemment, la résolution de votre problème réglé complètement à partir de la mémoire est de savoir comment les grands sites y résoudre problème en temps opportun.
Document magasins
Ce l'article essaie d'évaluer le kv-magasins avec des magasins comme couchdb/riak/mongodb. Ces magasins sont plus capables de la recherche(un peu plus lent que le KV magasins), mais ne sont pas bonnes à plein-texte-recherche.
Plein-texte-recherche
Si vous voulez faire le plein-texte-les requêtes de recherche que vous pourrait comme:
Vous n'avez probablement besoin d'un SGBD relationnel, si pas maintenant, très bientôt. Si vous commencez maintenant, tout vos problèmes et vos données sont simples et directes, puis quand ils deviennent difficiles et complexes, vous aurez beaucoup d'expérience avec au moins un SGBD pour vous aider. Vous n'avez probablement pas besoin de MySQL sur tous les ordinateurs de bureau, vous pouvez l'installer sur un serveur par exemple et de fournir des données sur votre réseau, mais vous peut-être besoin de fournir plus d'informations à propos de vos besoins, d'outils et d'équipements pour obtenir de meilleures suggestions.
Et, tandis que l'autre DBMSes ont leurs forces et leurs faiblesses, il n'y a rien de mal avec MySQL pour les grandes et les bases de données complexes. Je ne sais pas assez sur SQLite de commenter en connaissance de cause à ce sujet.
EDIT: @Eric de vos commentaires à ma réponse et les autres réponses que je forme encore plus fortement le point de vue qu'il est temps que vous avez déménagé dans une base de données. Je ne suis pas surpris que d'essayer de faire les opérations de base de données sur un 900MB dictionnaire Python est lent. Je pense que vous devez d'abord vous convaincre, alors votre de gestion, que vous avez atteint les limites de ce que votre actuelle outils peut supporter, et que les développements futurs sont menacées à moins que vous repenser les questions.
Si votre réseau ne pouvez vraiment pas un serveur de base de données que (a) vous avez vraiment besoin pour rendre votre réseau robuste, fiable et assez performant pour un tel but, mais (b) si ce n'est pas une option, ou pas une option au plus tôt, vous devriez être en pensant à la manière d'un centre serveur de bases de données en passant sur digère/extraits/rapports à d'autres utilisateurs, plutôt que simultanée SGBDR de travail dans une configuration client-serveur.
Les problèmes que vous rencontrez actuellement des problèmes de ne pas avoir les bons outils pour le travail. Ils sont ne va qu'empirer. Je souhaite que je pourrais vous suggérer une solution magique dans lequel cela n'est pas le cas, mais je ne peux pas et je ne pense pas que quelqu'un d'autre le fera.
Avez-vous fait des bench-marking pour confirmer que c'est les fichiers de texte que vous ralentir? Si vous ne l'avez pas, il ya une bonne chance que peaufiner une autre partie du code permet d'accélérer les choses de sorte qu'il est assez rapide.
Il sonne comme chaque ministère a son propre féodal de la base de données, et cela implique beaucoup d'inutiles de la redondance et de l'inefficacité.
Au lieu de transférer des centaines de méga-octets à tout le monde sur votre réseau, pourquoi ne pas conserver vos données dans MySQL et ont les ministères télécharger leur données de la base de données, où il peut être normalisée et accessible par tout le monde?
Que votre organisation se développe, ayant complètement différentes bases de données de départements qui ne connaissent pas les uns les autres, et contiennent potentiellement redondants ou des données contradictoires, va devenir très douloureux.
La machine, ce processus s'exécute sur l'disposer de suffisamment de mémoire et de bande passante pour gérer cela de manière efficace? Mettre MySQL sur une machine lente et de recodage de l'outil pour utiliser MySQL plutôt que des fichiers texte pourrait être beaucoup plus cher que de simplement ajouter de la mémoire ou de la mise à niveau de la machine.
Ici est un test de performances de base de données différents costumes ->
La Base De Données De Comparaison De La Vitesse
Je ne suis pas sûr de savoir comment objectif de cette comparaison est bien, vu que c'est hébergé sur sqlite.org.
Sqlite ne semble être un peu plus lent lors de la suppression des tableaux, sinon vous ne devriez pas avoir de problèmes pour l'utiliser.les Deux sqlite et mysql semblent avoir leurs propres forces et faiblesses, dans certains essais, l'un est plus rapide que d'autres, dans d'autres tests, l'inverse est vrai.Si vous avez été confrontés à une baisse de puis de performance attendus, c'est peut-être pas sqlite qui est à l'origine de cela, avez-vous fait tout de profilage ou autrement, assurez-vous que rien d'autre n'est à l'origine de votre programme à faire des siennes?
EDIT: mis à Jour avec un lien à un peu plus récente comparaison de la vitesse.
Il a été une couple de mois depuis que j'ai posté cette question et je voulais vous le savez tous comment j'ai résolu ce problème. Je suis à l'aide de Berkeley DB avec le module bsddb plutôt le chargement de toutes les données dans un dictionnaire Python. Je ne suis pas pleinement heureux, mais mes utilisateurs sont.
Ma prochaine étape est d'essayer d'obtenir un serveur partagé avec le redis, mais à moins d'utilisateurs commence à se plaindre de la vitesse, je doute que je l'aurai.
Un grand merci tous ceux qui ont aidé ici, et j'espère que cette question et les réponses sont utiles à quelqu'un d'autre.
Si vous avez ce problème avec un fichier CSV, peut-être vous pouvez simplement cornichon le dictionnaire et de générer un cornichon "binaire" fichier avec
pickle.HIGHEST_PROTOCOL
option. Il peut être plus rapide à lire et de vous obtenir un fichier plus petit. Vous pouvez charger le fichier CSV et ensuite de générer le marinés fichier, qui permet un chargement plus rapide dans le prochain accès.De toute façon, avec 900 Mo d'informations, vous allez faire face à un certain temps de chargement en mémoire. Une autre approche est de ne pas le charger sur une étape sur la mémoire, mais de ne charger que les informations lorsque cela est nécessaire, peut-être de faire des différents fichiers par date, ou de toute autre catégorie (entreprise, type, etc..)
Prendre un coup d'oeil à mongodb.