python - 最佳数据挖掘数据库

标签 python database nosql data-mining

我是一个临时的 Python 程序员,到目前为止只使用过 MYSQL 或 SQLITE 数据库。我是一家小公司的计算机人员,我已经开始了一个新项目,我认为是时候尝试新的数据库了。

销售部门每周都会进行 CSV 转储,我需要制作一个小型脚本应用程序,允许其他部门的人员混合信息,主要是链接记录。我已经解决了所有这些问题,我的问题是速度,我只使用纯文本文件来处理所有这些问题,不出所料,它非常慢。

本来想用mysql的,后来每个桌面都需要安装mysql,sqlite比较容易,但是很慢。我不需要完整的关系数据库,只需要在合适的时间处理大量数据的某种方式。

更新:我想我没有很详细地了解我的数据库使用情况,因此无法很好地解释我的问题。我正在将大约 900 Megas 或更多的数据从 csv 读取到 Python 字典中,然后使用它。我的问题是快速存储和读取数据。

非常感谢!

最佳答案

快速总结

  • 您需要足够的内存(RAM)来有效地解决您的问题。我觉得你应该升级内存??当阅读优秀High Scalability博客您会注意到,为了有效地解决问题,大型站点会将完整的问题集存储在内存中。
  • 您确实需要一个中央数据库解决方案。我不认为只用 python 字典手工做这件事就可以完成工作。
  • 如何解决“您的问题”取决于您的“查询”。我首先会尝试做的是将您的数据放入elastic-search(见下文)并查询数据库(看看它是如何执行的)。我认为这是解决您的问题的最简单方法。但是正如您在下面阅读的那样,有很多方法可以解决您的问题。

  • 我们知道:
  • 你使用 python 作为你的程序语言。
  • 您的数据库约为 900MB(我认为这相当大,但绝对可以管理)。
  • 您已经加载了 Python 字典中的所有数据。在这里,我假设问题出在那里。 Python 尝试将字典(python 字典也不是最适合内存的)存储在您的内存中,但是您没有足够的内存( 你有多少内存???? )。当这种情况发生时,您将拥有很多 Virtual Memory .当您尝试阅读字典时,您会不断将光盘中的数据交换到内存中。这种交换会导致“Trashing”。 我假设你的电脑没有足够的内存。如果为真,那么我将首先使用至少 2 GB 的额外 RAM 升级您的内存。 当您的问题集能够适应内存时,解决问题的速度会快得多。我打开了我的计算机体系结构书,其中(内存层次结构)说主内存访问时间约为 40-80 纳秒,而磁盘内存访问时间为 5 毫秒。这是一个很大的不同。

  • 丢失的信息
  • 你有中央服务器吗?您应该使用/拥有一台服务器。
  • 你的服务器有什么样的架构? Linux/Unix/Windows/Mac OSX?在我看来,您的服务器应该具有 linux/Unix/Mac OSX 架构。
  • 你的服务器有多少内存?
  • 你能不能更好地指定你的数据集(CSV)。
  • 你在做什么类型的数据挖掘?您需要全文搜索功能吗?我不假设您正在执行任何复杂的 (SQL) 查询。仅使用 python 字典执行该任务将是一个复杂的问题。你能把你想要执行的查询形式化吗?例如:
  • "get all users who work for departement x"
  • "get all sales from user x"

  • 需要数据库

    I am the computer person for everything in a small company and I have been started a new project where I think it is about time to try new databases.



    您肯定需要一个数据库来解决您的问题。仅使用python字典自己做这件事很困难。特别是当您的问题集无法放入内存时。

    MySQL

    I thought about using mysql, but then I need installing mysql in every desktop, sqlite is easier, but it is very slow. I do not need a full relational database, just some way of play with big amounts of data in a decent time.



    集中式(客户端-服务器架构)数据库正是您解决问题所需要的。让所有用户从您管理的 1 台 PC 访问数据库。 您可以使用 MySQL 来解决您的问题 .

    东京暴君

    您也可以使用 Tokyo Tyrant存储您的所有数据。 Tokyo Tyrant 速度非常快,而且不必存储在 RAM 中。它处理获取数据的效率更高(而不是使用 python 字典)。但是,如果您的问题完全适合 Memory,我认为您应该看看 Redis(如下)。

    Redis:

    例如,您可以使用 Redis(quick start in 5 minutes) (Redis 非常快)将所有销售额存储在内存中。 Redis 非常强大,可以非常快地执行此类查询。 Redis 唯一的问题是它必须完全适应 RAM ,但我相信他正在努力(每晚构建已经支持它)。就像我之前已经说过的那样,完全从内存中解决您的问题是大型网站如何及时解决问题。

    文件存储

    article尝试使用诸如 couchdb/riak/mongodb 之类的文档存储来评估 kv 存储。这些商店的搜索能力更好(比 KV 商店慢一点),但不擅长全文搜索。

    全文搜索

    如果您想进行全文搜索查询,您可能会喜欢:
  • elasticsearch(videos) :当我看到elasticsearch的视频演示时,它看起来很酷。您可以尝试将(发布简单的 json)数据放入 elasticsearch 中,看看它有多快。我正在 github 上关注 elasticsearch,作者正在向其提交大量新代码。
  • solr(tutorial) :很多大公司都在使用 solr(github, digg) 来支持搜索。从 MySQL 全文搜索到 solr,他们得到了很大的插入。
  • 关于python - 最佳数据挖掘数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2577967/

    相关文章:

    java - 将 HTML 模板存储在 NoSQL DB 中

    database-design - 为什么在 dynamodb 中使用多个表被认为是糟糕的表设计?

    python - 如何从开始时间中减去每次

    python字典理解迭代器

    python - 创建列表,附加数据并转换为元组 : shortest code

    mysql - 数据库设计 : how to support multi-lingual site?

    nosql - 我可以使用 Redis 作为唯一的数据库来为具有用户配置文件的中小型社交网站提供支持吗?

    python - 设置 LSTM 层的初始状态

    mysql - 在关系数据库中存储和引用不可变的有序列表

    php - MySQL插入语句后获取主键