python - 为了适应大规模数据存储和检索,我应该做什么?

标签 python mysql nosql distributed-computing large-data-volumes

mysql数据库内的表中有两列。第一列包含指纹,第二列包含具有该指纹的文档列表。它很像搜索引擎构建的倒排索引。表内记录的实例如下所示;

34 "doc1, doc2, doc45"

指纹的数量非常大(可达数万亿)。数据库中基本上有以下操作:插入/更新记录以及根据指纹匹配检索记录。表定义Python片段是:

self.cursor.execute("CREATE TABLE IF NOT EXISTS `fingerprint` (fp BIGINT, documents TEXT)")

插入/更新操作的代码片段是:

if self.cursor.execute("UPDATE `fingerprint` SET documents=CONCAT(documents,%s) WHERE fp=%s",(","+newDocId, thisFP))== 0L:
                self.cursor.execute("INSERT INTO `fingerprint` VALUES (%s, %s)", (thisFP,newDocId))         

到目前为止,我观察到的唯一瓶颈是 mysql 中的查询时间。我的整个应用程序是基于网络的。所以时间是一个关键因素。我也想过使用cassandra,但对其了解较少。请建议我一个更好的方法来解决这个问题。

最佳答案

获取高端数据库。 Oracle 有一些优惠。 SQL Server 也是如此。

数万亿条条目远远超出了普通数据库的范围。这是非常高端非常特别的东西,特别是如果你想要像样的性能。还要获得它的硬件 - 这意味着一个像样的中端服务器、128+GB 的缓存内存,以及一个像样的 SAN 或通过 SAS 的足够好的 DAS 设置。

请记住,万亿意味着:

  • 每个字节使用 1000GB。

如果指纹存储为 int64,则仅用于此数据就需要 8000GB 磁盘空间。

或者您是否尝试从带有几张 2tb 光盘的小型廉价服务器上运行它?祝你好运。

关于python - 为了适应大规模数据存储和检索,我应该做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4560252/

相关文章:

javascript - 自引用 Parse.com 类

python - 如何打破Python中的循环

python:使用 scikit-learn 构建带权重的矩阵

Python:如果我知道原始像素的位置,如何找到所有连接的像素?

mysql 在大表上使用不正确的索引

python - Redis:内存优化/性能策略

python - 有办法绕过 'assertion failed'错误吗?

php - Mysql左连接,按字段中的唯一值计数不起作用

mysql - DISTINCT 和 LAG 窗函数

nosql - 存储非平稳分布的数据库