最近的一个项目,用django做的一个检测网站,主要是检测网络流量的,月均10多亿的数据.这对表的设计和数据库查询有很大的要求,路上踩了很多坑,这里总结下.具体代码就不贴了,事关公司机密,这里主要写下思路.
1.表设计
因为有20多个字段,一开始是用mysql 3张表来存储,之间通过外键相连,便于前端展示,后来实际检测的时候,发现慢的要死,2W多数据就要1min,这还了得.后来全部重新设计了,用一张表来存储,到达一定数据量时就分表存储.检测速度上去了,后端的查询代码就要好好考虑了.
而且最后还给一些字段加了普通索引,一般都是对where, group by, order by 后面的字段加索引的,具体说起来语句如:
create index id_sip on testresult( sip(200));
但索引不是越多越好,还得看具体情况.
2.django + haystack + elasticsearch 实现全文检索
一开始是用django+haystack+whoosh来实现的,但数据量到了十几万的时候,建个索引就要半个钟,果断不能忍,后来换成solr,发现效果还是不理想,最后换成elasticsearch才搞好的.这里总结下遇到的坑:
(1)elasticsearch在win7下安装的在查询时,haystack连接不到elasticsearch,老是报错,而且每次elasticsearch都要手动开启(可能自身配置的问题吧).后来换成ubuntu 16.04后一切正常,因时间关系,也懒的改了,毕竟在ubuntu上部署了.
(2)具体配置如下:
settings.py:
HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', 'URL': 'http://127.0.0.1:9200/',