1

假设我有一个电子商务网站,其中包含数百万种产品,每天有数百万次浏览量,主要用于产品详细信息页面。

假设我目前将所有数据都保存在关系数据库中,这是旧的好方法。

将数据保存在关系数据库中以进行查询、聚合和过滤产品以及所有这些的利弊是什么……但使用平面 json 文件来获取产品详细信息?

因此,每 1 个产品有 1 个文件,所有详细信息都序列化为 json。这些文件将被放置在一个高性能的 CDN 下,地理分布等等。当用户去

www.mysite.com/prods/00123

服务器(甚至客户端)将为布局加载一个模板文件,然后用它从诸如 cdn.mysite.com/prods/00123.json 之类的东西读取的数据填充它

所以在这种情况下我基本上不需要进行查询——我直接跳转到以产品 ID 命名的文件。我想它应该非常快,但我会将可扩展性/缓存/地理分布委托给外部强大的合作伙伴(cdn,如 akamai、amazon 等),而不是构建自己的(昂贵且难以维护)分布式数据库服务器?

我期待您的建议/反馈……尤其是涉及到现实世界的经验时:)

谢谢!

4

1 回答 1

2

根据您的要求,

最好将产品描述存储在像 MongoDB 这样的无模式数据库中,因为您的产品可以有非常不同的字段,属性数量(和相应的字段)有很大差异。此外,此类信息的写入频率也远低于读取频率。MongoDB 具有集合级别的写入锁,如果您喜欢进行一致的写入,可以阻止写入繁重的应用程序。然而,MongoDB 中的读取速度非常快,因为您不必从 EAV 模式表中进行连接或获取字段值。不用说,基于您的数据卷分片和复制需要在生产环境中完成。

它比存储在平面文件中要好,因为 MongoDB 的读取性能非常好,因为内存映射文件并且您还可以获得复制/分片。

但是,如果文件系统(或文件系统网络)提供数据库提供的安全性、速度和可访问性,那么将数据存储在文件系统中并不是一个坏主意。如果将平面文件配置为以有效方式提供服务,则传统的 db vs flat-file 参数不成立。

但是,您不应该在 MongoDB 中存储诸如购物车、结帐交易等信息,因为您没有 ACID 交易,并且频繁的写入和更新“一致”不是 MongoDB 的一杯茶。

于 2013-07-19T13:59:13.077 回答