san*_*lto 5 php mysql performance denormalization mongodb
我正在运行一个开始超越简单性能和Tunning的网站.这是一个PHP应用程序,MySQL作为后端.正确调整MySQL并优化代码.
问题是,我发现我可以使用某种非规范化来加快速度.
假设您有一个类似于ebay或亚马逊的网站.您的数据库中有产品,其中包含一些相关信息(卖家,购买产品的客户,城市,州等).这将是Relational DataBase中的多个表,并且很好地保持这种方式以获得良好的查询.但是,例如,对于主页,您可以使用一个非规范化文档(例如,在MongoDB中).可以是最新产品的集合,denormalied,类似于:
products = {
{
id:13,
name:"Some product",
city:"aCity",
state:"aState",
price:"10"
},
{
id:123,
name:"another product",
city:"aCity",
state:"aState",
price:"10"
}
}
Run Code Online (Sandbox Code Playgroud)
这样,我可以查询该集合而不是MySQL数据库(包含所有连接),事情可以变得非常快.
现在,问题就在这里.何时以及如何对数据进行非规范化?例如,我可以决定在插入数据时对数据进行非规范化.
所以,在我的"create-product.php"中(简单地说).我可以为mysql做所有"插入",之后我可以保存到Mongo集合.
或者,我可以在服务器中运行一个程序.或者让一些cron来寻找最新产品.
所有这些都是可能的.你是做什么?你的经验是什么?
非常感谢.
从概念上讲,您正在创建某种缓存,并且您预见到填充它会非常耗时,因此您希望将其持久化,合理的假设是从持久化缓存加载会比直接加载要快。回到真实的数据库。
您的想法有一些变化,缓存 HTML 页面片段或 JSON 字符串,并使用分布式内存缓存 - 不是持久的,而是容错的。
所有缓存解决方案的一个大问题是:“我能承受多陈旧的后果?”。对于某些数据来说,24 小时内过期并不重要。例如:最受欢迎的 10 本书?最新评论,对于这些,只需进行一些批量更新即可。对于更紧急的事情,您可能需要确保有更快速的更新,但您确实希望避免在主流中投入太多额外的处理。例如,如果客户因为正在等待缓存更新而给他带来缓慢的购买体验,那将是一种耻辱。在这些情况下,您可能只是在队列中删除“这是一个更新”消息,或者实际上是“您的条目号 23 现已过时”消息,让缓存在闲暇时拾取该消息,并在需要时自行刷新。
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |