Phi*_*hil 9 mysql database amazon-s3 csv
我们必须存储大约 300 万种产品的基本信息。目前,信息是一个 180 mb 的 CSV,每季度更新一次。
每天将有大约 30,000 次查询,但这些查询只是一个非常简单的键值存储。我们只需要查找产品 ID 并显示其余信息(这些信息都在一个记录中)。
这是针对 Web 的,因此快速的性能至关重要。
即使我们真的不需要关系数据库,我们是否应该使用 MySQL?我们应该每个季度生成 300 万个静态 html 文件吗?我们应该在 Amazon S3 或 Rackspace Cloud Files 之类的东西上为每个产品存储一行 CSV 吗?做这个的最好方式是什么?
Joh*_*ers 15
因为 MySQL 得到了如此广泛的支持,而且这确实是一件微不足道的事情,所以我建议使用它。除非服务器至少有几 GB 的内存,否则我建议坚持使用 MySQL 而不是使用内存系统。
一旦您开始将数据放入数据库,无论是 MySQL 还是其他数据库,您很可能会发现它有更多用途。现在您只是在谈论键值对,但与您的产品相关的其余数据必须存储在某个地方。如果那不是在数据库中,我无法想象数据存储非常高效。
无论您做什么,都不要创建那三百万个文件。我们已经在这里看到许多问题已经由如此多的文件创建的问题引起。
Laz*_*One 13
您可以使用专门针对此类任务优化的 NoSQL 数据库的 Key-Value 类型。看一下:
当然,你可以使用MySQL或任何其他关系数据库,但解决方案专为数据的键值型设计应该是更好的(否则什么是排在首位设计它们的点,除了可能的事实,这将是更小(在 RAM 和 HDD 方面)解决方案)。
小智 6
现在是完全不同的东西:
鉴于:
开箱即用的解决方案:
将每个产品转储为 TXT 资源记录并将其存储在 DNS 中,例如:
$origin products.example.com.
product_1_name IN TXT "product 1 description"
product_2_name IN TXT "product 2 description"
...
product_3000000_name IN TXT "product 3000000 description"
Run Code Online (Sandbox Code Playgroud)
好处:
这可能是一个坏主意的原因:
MySQL 与 MyISAM 和一些好的索引听起来非常适合这个。当然还有很多其他选项,但 MySQL 在任何商业网络主机上都得到了非常广泛(如果不是普遍)的支持。根据您所需的速度,memcached 可能也值得考虑,但如果不知道每个键/值对的大小,在内存中存储 300 万个键/值对可能比 180Mb CSV 文件更糟糕(哦等等,这是一个 180Mb 的 CSV 文件,所以我们知道它们有多大。它们一定是非常小的对,所以 memcached 可能会更好)。
您不想要 300 万个静态 HTML 文件,它会严重损害您的文件系统。一行 CSV,即使在 S3 上,也会遇到同样的问题。没有人希望一个文件夹中有 300 万个文件。
| 归档时间: |
|
| 查看次数: |
9265 次 |
| 最近记录: |