用于创建用户段的最佳DB结构

时间:2017-08-09 20:13:34

标签: mysql database search redis nosql

我想创建一个分段引擎,似乎无法找出用于该任务的最佳DB或DB结构。 目前我使用MySQL作为我的主要数据库,但是分段引擎是一个单独的软件组件,因此如果适用的话可以有不同的数据库。

基本上我有1000万个使用UserID(整数)标识的唯一身份用户。分段引擎的管理员使用一些预定义规则(如年龄范围,地理位置,交易历史等)动态创建分段。应用程序应定期(每15分钟一次)执行每个段的规则,以获取属于该段并存储它的所有用户的当前列表(每个用户最多可达100万用户)。

以后的应用程序公开API以允许外部系统使用分段功能,即: 1.获取特定UserID所属的所有段的列表。 2.获取特定分段包含的所有UserID的列表。

请注意,由于段需要非常频繁地更新(每15分钟一次),这会导致数据库中的大量事务“维护”段,其中应删除不适用的用户并始终添加新的用户。

到目前为止,我考虑了几种方法: 1.普通的MySQL,我有一个属于段的用户表(SegmentID,UserID)。 (这种方法有两个缺点:存储空间和MySQL中的常量删除/插入/更新,这会通过引入页面拆分来降低innodb的性能。)

  1. 在MySQL中使用JSON数据类型,我可以在其中拥有表(UserID,Segments),其中segments是包含SegmentID数组的json。 (这里的缺点是搜索速度慢和更新缓慢)

  2. 将Redis与集合(UserID,Segments)一起使用,其中UserID将是Key,Segments将是SegmentID集合。 (这里的缺点不是按SegmentID搜索的简单方法)。

  3. 有没有人从事过类似的工作并能提供任何指导? 任何反馈都将受到赞赏,因此我可以指出一个我可以进一步研究的方向。

1 个答案:

答案 0 :(得分:0)

我认为您可以使用Elasticsearch执行此任务。