如何设计分布式重写数据存储
How to design a distributed write-heavy data store
其实是一道面试题想了2个月一直没找到合适的架构
问题
我们想构建一个小型分析系统来检测订单欺诈。
系统有以下要求
- 不允许使用市场上的任何技术(
MySql
、Redis
、Hadoop
、S3
等)
- 需要随着数据量的增长而扩展
- 只是一堆机器,有磁盘和相当大的内存
- 10MWrites/Day
系统需要提供以下API
/insertOrder(order): Order
将订单添加到存储中。该订单可以被视为大小为 1-10KBs 的 blob,具有 orderId
、beginTime
和 finishTime
作为可区分字段
/getLongestNOrdersByDuration(n: int, startTime: datetime, endTime: datetime): Order[]
检索在 startTime
和 endTime
,
之间开始的最长 N 个订单按持续时间 finishTime - beginTime
衡量
/getShortestNOrdersByDuration(n: int, startTime: datetime, endTime: datetime): Order[]
检索在 startTime
和 endTime
、
之间开始的最短的 N 个订单按持续时间 finishTime - beginTime
衡量
看看使用druid数据库。如果你时间序列数据
- 随着数据量的增长,它应该可以很好地扩展
- 可以有效回答时长查询
https://druid.apache.org/ - 这已被财富 500 强公司大规模用作分析数据库
其实是一道面试题想了2个月一直没找到合适的架构
问题
我们想构建一个小型分析系统来检测订单欺诈。
系统有以下要求
- 不允许使用市场上的任何技术(
MySql
、Redis
、Hadoop
、S3
等) - 需要随着数据量的增长而扩展
- 只是一堆机器,有磁盘和相当大的内存
- 10MWrites/Day
系统需要提供以下API
/insertOrder(order): Order
将订单添加到存储中。该订单可以被视为大小为 1-10KBs 的 blob,具有orderId
、beginTime
和finishTime
作为可区分字段/getLongestNOrdersByDuration(n: int, startTime: datetime, endTime: datetime): Order[]
检索在startTime
和endTime
,
之间开始的最长 N 个订单按持续时间finishTime - beginTime
衡量
/getShortestNOrdersByDuration(n: int, startTime: datetime, endTime: datetime): Order[]
检索在startTime
和endTime
、
之间开始的最短的 N 个订单按持续时间finishTime - beginTime
衡量
看看使用druid数据库。如果你时间序列数据
- 随着数据量的增长,它应该可以很好地扩展
- 可以有效回答时长查询
https://druid.apache.org/ - 这已被财富 500 强公司大规模用作分析数据库