京东网站url规划分析

对于一些大型产品网站,当不同产品项的过滤条件不一样的时候,多个过滤条件会完全不一样。如服装行业与电脑配置的许多参数都不一样。而他们又是如何实现自动通过程序来调用的呢,是一个很值得学习的知识的。

下面我们来通过京东其中一个服装url来看一下,他们是如何实现这一点的。

jd_url_parse1上图是对于一些大类频道的url规划信息。非常的清楚,就不再一一讲述了。下面我们主要讲右侧”条件筛选“这一块.

分析url:
http://list.jd.com/list.html?cat=1315%2C1342%2C9733&brand=35553%2Ctzmall&page=1&ext=53345%3A%3A1373%5E%5E64135%3A%3A8646%5E%5E95400%3A%3A8648%5E%5E10669%3A%3A1656%5E%5E29520%3A%3A1589%5E%5E110357%3A%3A10991%5E%5E&delivery=2&sort=sort_dredisprice_asc

经过用js的unescape(url)反编码后,得出url为

http://list.jd.com/list.html?cat=1315,1342,9733&brand=35553,tzmall&page=1&ext=53345::1373^^64135::8646^^95400::8648^^10669::1656^^29520::1589^^110357::10991^^&delivery=2&sort=sort_dredisprice_asc

可能分析通过在浏览器里输入以上两个网址看到,打开的是同一个页面的。只是url编码不一样而已。

解码后的参数对对如下:

cat=1315,1342,9733 (分类信息,见上图)
brand=35553,tzmall 品牌(id:品牌名称)
page=1 当前页码
ext=53345::1373^^64135::8646^^95400::8648^^10669::1656^^29520::1589^^110357::10991^^
delivery=2 物流配送(0:全部 1:京东配送 2:第三方配送)
sort=sort_dredisprice_asc 排序(价格升序)

其中cat,brand,page,delivery,sort这类的参数是固定不变的,当然还有更多的参数这里没有体现出来,如price 价格参数。对于一些不固定的参数是在ext里体现的,通过上面的ext参数再次分解,得出以下键值对:

attr_id attr_value
=============================
53345::1373 风格
64135::8646 袖型
95400::8648 领型
10669::1656 尺码
29520::1589 颜色
110357::10991 图案

其中attr_id是用来从数据库中获取”属性名称”信息,而attr_value是从数据库字段中保存的”属性值”的值信息.根据此值从数据库中过滤符合条件的记录信息
我们可以试着手动修改attr_id的值,将数字53345修改为53344,可以看到默认的风格由”学院风格“显示成了“学院风格”。如下图所示

jd_url_parse2

可以看到,所有不同种类产品的过滤字段信息通过一个ext参数来实现了。大家可以看一下京东网站其它频道的列表信息。

这里抛出一些新的问题:

1.每行的属性前面的标题,如”品牌”,“风格”,”材质”这类的字样又是如何来动态控制的呢?
2.一些参数的是否受其它参数的影响,如用户选择”尺码:均码细节:毛边设计“时,会发现许多过滤项都消失了,这些是如何实现的?

用的方法很简单吧,不过复杂的问题是在数据库是他们是如何存储的呢?不同种类的产品不可能保存到同一个表中,起码关系型数据库是不行的。也许有同学会说mongodb可以实现,不错,是可以实现,但可以肯定他们不是用这个产品的,毕竟产品数据太多了,全部或者部分热数据放在内存里还是吃不销,不然吃内存太厉害了。

从以前京东的架构来看,他们用的是sql server,经过前两年的那个618促销活动带来的影响,后来引入了oracle数据库。新产品构架也由原来的开发语言由c#改为了java了。至于后端数据库架构是如何搞的,还是一个非常有意义的东西的。

个人分析他们是根据cat这个参数来定位不同种类产品的数据库的。