class BaseData
def self.search(params={})
new(params).search
end
def search
search_criteria = [
filter_criteria,
aggregations_criteria,
sort_criteria,
query_criteria
].compact.reduce(:merge) || {}
repository.search search_criteria
end
def filter_criteria
raise 'You should override this method.'
end
def sort_criteria
raise 'You should override this method.'
end
def aggregations_criteria
raise 'You should override this method.'
end
def query_criteria
raise 'You should override this method.'
end
def repository # 这个方法实现是拿到查询的type 例如user可能就是user对应的es type地址
raise 'You should override this method.'
end
回复 ( 6 )
我理解下题主目前的麻烦。
第一是,数据需求一提出来就得查线上数据库,而这样会影响性能,影响正常业务。
第二是,运营提的数据需求多且复杂,你已经有些烦了,作为一名程序员,你觉得不是自己应该做的事。
第一个问题,可以通过建一个从库来解决吧,每天将前一天的数据导进来。
第二个问题,不知你们团队有无专门做数据分析方面的运营人员,我觉得使用SQL做数据提取和之后的数据可视化,都是数据分析人员的本职工作。如果你们团队没有这方面的人员,那么可否考虑做一个比较方便查询数据和导出数据的接口呢,刚开始不用做太复杂,慢慢迭代优化改进即可!
本人不是程序员,有说的不对的地方,还请多多包涵,可以直接给我指出,谢谢~
下面这个思路现在是我们现在用来分析log的方法,log会有好多种不同的类型和不同的信息,但是之间的关系型并不强,只需要能统一到一起即可,所以未必完全适合楼主的需求,请自行斟酌。
===更新下====
提供个简单的思路。
一、准备数据
把所有数据备份到elasticsearch里,这一步取决于你使用什么类型的语言,自己研究即可。
二、拆分查询条件
首先对查询条件分类:
– 排序(sort)
– 精确匹配(filter)
– 模糊匹配(query)
– 聚集(aggregation)
然后开始在你的代码里逐一实现这些,下面贴一个ruby的实现描述一下思路:
我是做营销的,这样的数据还是很重要的,而且经常有新的变化的,所以你不方便处理,
可以用备用数据库查
你可以只给原始数据,数据处理 图表你让他们做,
用线上数据库来跑业务报表那是作死,既不安全(程序员操作线上数据库),也不高效。
写一个可视化查询工具啊,程序员连这点思维都没有吗。
当年我作为一个实习生,就是吭哧吭哧把公司的所有业务指标和查询条件凑一块,写了一个可视化的 HiveQL 查询工具,业务人员点点鼠标,选好指标、条件,点一下查询,工具自动生成 QL 自动创建 task ,操作员去喝杯咖啡,回来就能看到结果了,线图饼图,想怎么看怎么看,还能导出数据自己去做分析。
每天半夜开始,用kettle,吭哧吭哧拖数据,将业务库的要用到数据拖到另一个地方,管它叫数据仓库,然后贱贱滴说,我们不生产数据,我们只是数据滴搬运工
搞个专门的备份服务器