我们有一个中等规模的分析引擎,建立在弹性搜索集群之上。
我们以json的形式将发送数据存储到服务器上,这与的做法非常相似。我们在ES集群中推送整个数据。到目前为止,这相当于每天60 2TB (每月Approx 2TB)。
我们有几个月的数据保留政策,比如说6个月(按照定价计划)。
我们提供动态报告,比如..。
问题
到目前为止,它一直对我们有很大的帮助,但我们面临着一个有待扩大的问题。因为我们已经部署了1000多个服务器来处理这个数量的数据&显示近乎实时的分析。
我在这里寻找的是,如何优化数据存储,并仍然显示几乎实时切片和切分的数据。想象一下google分析或者混合面板是如何实时存储和显示数据的。
我愿意接受任何技术转变。请提出建议。(与GA或Mix类似的是我们所拥有的特性)
你们会不会像mongodb那样在一些非SQL中存储大量的数据,并在这些数据上运行MAP-还原呢?但这可能不是实时的(我们可以期望延迟5-10分钟显示数据)。
技术栈(截至目前)使用了
我们存储事件有效载荷,它看起来像这样。
{
"query_params":[
],
"device_type":"Desktop",
"browser_string":"Chrome 47.0.2526",
"ip":"62.82.34.0",
"screen_colors":"24",
"os":"Mac OS X",
"browser_version":"47.0.2526",
"session":1,
"country_code":"ES",
"document_encoding":"UTF-8",
"city":"Palma De Mallorca",
"tz":"Europe/Madrid",
"uuid":"A37F2D3A4B99FF003132D662EFEEAFCA",
"combination_goals_facet_term":"c2_g1",
"ts":1452015428,
"hour_of_day":17,
"os_version":"10.11.2",
"experiment":465,
"user_time":"2016-01-05T17:37:10.675000",
"direct_traffic":false,
"combination":"2",
"search_traffic":false,
"returning_visitor":false,
"hit_time":"2016-01-05T17:37:08",
"user_language":"es",
"device":"Other",
"active_goals":[
1
],
"account":196,
"url":"http://someurl.com",
"action":"click",
"country":"Spain",
"region":"Islas Baleares",
"day_of_week":"Tuesday",
"converted_goals":[
],
"social_traffic":false,
"converted_goals_info":[
],
"referrer":"http://www.google.com",
"browser":"Chrome",
"ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36",
"email_traffic":false
}编辑
“优化数据存储”是指对于每个事件,我们在json有效负载中接收到70%相同的数据。但是,我们继续在ES中为事件创建新文档。我希望如果我们停止存储json的重复密钥,只存储在后续事件有效负载中更改的内容。从而优化存储空间。
我们在所有服务器上使用SSD。我担心的是,我们谈论的是GA的规模和类似数量的数据。我怀疑上面提到的建筑或技术能否存活下来。寻找关于这种规模的建议。
发布于 2017-05-23 05:19:26
我认为您已经使用了最适合这种用例的堆栈。如果还没有完成,我建议对elasticsearch优化进行微调。
一些建议可能是
希望这能有所帮助。
https://stackoverflow.com/questions/44125082
复制相似问题