【问题标题】:Database for Large number of 1kB data chunks (MySQL?)用于大量 1kB 数据块的数据库(MySQL?)
【发布时间】:2009-04-29 07:55:35
【问题描述】:

我有一个非常大的数据集,数据集中的每个项目大约有 1kB 大小。分布在网络上的许多应用程序需要快速查询数据。该数据集有超过一百万个项目(即 5 亿+ 1kB 数据块)。

存储此数据集的最佳方法是什么(需要允许添加更多项目并快速读取它们,但从不修改已添加的数据)?使用二进制 blob 格式的 MySQL DB 是否合适?

还是应该将它们中的每一个都存储为文件系统上的文件?

编辑:这个数字现在是 100 万个项目,但需要能够轻松扩展到超过 5 亿个项目。

【问题讨论】:

  • 您打算对数据运行什么样的查询?全文搜索?还是数据有关系字段?
  • 没有全文,每个块只有一个唯一的ID,对象内部不需要索引。

标签: mysql database performance


【解决方案1】:

因为不需要索引对象内部的任何内容。我不得不说文件系统可能是你最好的选择,而不是关系数据库。由于只有一个唯一的 ID 和一个 blob,因此这里实际上没有任何结构,因此将其放入数据库没有任何价值。

您可以使用 Web 服务器来提供对存储库的访问。然后是像 nginx w/memcache 这样的缓存解决方案,将其全部保存在内存中并使用负载平衡进行横向扩展。

如果您遇到进一步的性能问题,您可以删除文件系统并像 Facebook 使用他们的照片系统一样滚动自己的文件系统。这可以减少不必要的 IO 操作,用于从文件系统中提取不需要的元数据,例如安全信息。

【讨论】:

    【解决方案2】:

    如果您需要检索保存的数据,那么存储在文件中肯定不是一个好主意。

    MySQL 是一个不错的选择。但请确保您设置了正确的索引。

    关于二进制blob。这取决于您打算存储什么。给我们更多细节。

    【讨论】:

    • 它自己的数据是一个二维数组字节,尺寸略有不同(有些可能是28x30,有些可能是30x35等)。
    • >> 文件没有问题。如果你有频繁的检索。它肯定会有性能问题。仔细阅读他的问题。 >> 分布在网络上的许多应用程序需要快速查询数据。
    • 废话。数据库在读取磁盘方面与文件系统一样糟糕。如果您希望从多个应用程序访问实际工作,数据应该在 ram 中。
    • 数据库有它自己的好处。我们也可以使用文件系统……如果使用得当的话。我还是推荐数据库!
    【解决方案3】:

    这是 1 GB 的数据。你打算用数据库做什么?

    那肯定只是一个文件,启动时将其读入ram。

    扩展到 5 亿很容易。这只需要更多的机器。 根据具体的应用程序特性,您可能能够对 ram 中的数据进行规范化或压缩。

    您也许可以将内容保存在磁盘上并使用数据库,但这严重限制了您在同时访问方面的可扩展性。您可以从磁盘获得 50 次磁盘访问/秒,因此只需计算您需要多少磁盘即可。

    【讨论】:

    • 我忘了说,目前是 100 万,但还需要轻松扩展到 5 亿左右。
    猜你喜欢
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 2016-01-24
    • 2014-06-27
    相关资源
    最近更新 更多