我想构建一个事件分析系统,在那里我可以记录和查询用户已完成的事件,例如在网站上。
我对数据模型的天真想法只是事件文档的集合,每个事件包括用户标识,事件类型等。所以我想到这样的事情:
{ userid: Joe, event: homepage }
{ userid: Mike, event: homepage }
{ userid: Joe, event: productsPage }
{ userId: Joe, event: accountSettings }
{ userId: Joe, event: checkout }
etc
但现在我正在努力弄清楚如何做一些我最有可能想做的查询。
例如,我想说“给我一个访问过主页和产品页面以及结帐页面的所有用户的列表”
对我来说,我需要使用我的应用程序代码来执行此操作,而不是弹性搜索?我需要做类似的事情:
Step 1: select all users who have done 'homepage'
Step 2: select all users who have done 'products page'
Step 3: select all users who have done 'checkout page'
Step 4: build a list of only those users who appear in all 3 lists.
如果我拥有2000万用户的用户群,我冒险将大量数据列入我的应用程序?
另一种选择是每个用户拥有一个文档,以便Joe看起来像
{userid:Joe,event:[homepage,productsPage,accountSettings,checkout]}
等等。
然而,这将涉及每次用户做某事时更新此文档。由于elasticsearch写了一个新的记录而不是更新,这将涉及可怕的重写量,因为每个用户可能会在一年内说5000个事件,并在不同的日子里传播。更不用说重写索引了吗?
我是否缺少一种惯用的方法,即用户可以完成对每个用户的定期更新来完成数据库,以及允许通过多个条件快速查询该数据的buid索引 - 例如已完成eventA和eventB的用户AND eventC?
非常感谢你的帮助!
答案 0 :(得分:0)
您可以使用Kibana可视化存储在Elasticsearch中的数据。
您可以自行使用此类事件: -
{ userid: Joe, event: homepage }
{ userid: Mike, event: homepage }
{ userid: Joe, event: productsPage }
{ userId: Joe, event: accountSettings }
{ userId: Joe, event: checkout }
etc
在Elasticsearch中存储数据后,您可以使用Kibana并在事件字段中创建指定AND过滤器的可视化。