我正在设计一个带有mysql数据库的小型电子商务网站。我希望保持URL干净,没有任何硬编码的产品ID。
给定路径http://example.com/shop/ {product-name}
我选择将{product-name}转换为PHP中的crc32校验和,并将其存储在产品表中。
当收到产品页面的请求时,会将其转换为crc32校验和并查询匹配的行。我这样做只针对产品页面和博客页面。
我的问题
到目前为止,它在localhost上运行良好。一旦流量增加,这是一个可扩展的解决方案?有什么方法可以测试吗?
将校验和列索引为Select查询提供帮助吗?
校验和INT UNIQUE NOT NULL
我读取insert语句会受到性能影响。但假设插入是偶然的(博客或新产品每周2-3次,也许在3个月内),2-3秒的时间是可以接受的。它有多糟糕?
答案 0 :(得分:1)
我正在设计一个带有mysql数据库的小型电子商务网站。我希望保持URL干净,没有任何硬编码的产品ID。
给定路径http://example.com/shop/ {product-name}
因此,您的意思是https://example.com/shop/jelly-donut
和https://example.com/shop/coffee
。优秀。良好的搜索引擎优化。
我选择将{product-name}转换为PHP中的crc32校验和,并将其存储在产品表中。
这种方法有几个问题。
varchar()
列上的查找几乎与整数列上的查找一样快。一旦流量增加,这是一个可扩展的解决方案吗?
是的,它会的。但是查找产品名称也是如此。
将校验和列索引为Select查询提供帮助吗?
是的,您应该索引SELECT查询中使用的任何列集。索引是一种艺术。检查一下https://use-the-index-luke.com正确索引行少于一百万行的表后,SELECT
语句应该快速且可扩展。
如果你没有正确地索引表,无论你正在查找什么数据类型,你的查询都会非常慢。
我读取insert语句会受到性能影响。
一个微不足道的打击。每次插入几毫秒。
将校验和值更好地存储为二进制文件吗?
如果你使用二进制文件,你将在每个SELECT上节省几十微秒。几十微秒并不重要。
考虑在每次请求之前将校验和转换为二进制的附加任务。
这里唯一重要的是你的编程和维护时间。
保持系统简单。不要借用麻烦,尤其是对不同类型数据类型搜索之间差异的想象。