【问题标题】:How to design a distributed write-heavy data store如何设计分布式写入密集型数据存储
【发布时间】:2021-09-23 11:52:39
【问题描述】:

其实是我想了2个月的面试题,找不到合适的架构。

问题

我们想构建一个小型分析系统,用于检测订单欺诈。

系统有以下要求

  • 不允许使用市场上的任何技术(MySqlRedisHadoopS3 等)
  • 需要随着数据量的增长而扩展
  • 只是一堆机器,有磁盘和相当大的内存
  • 10M 每天写入次数

系统需要提供以下API

  • /insertOrder(order): Order
    将订单添加到存储中。该订单可以被视为大小为 1-10KBs 的 blob,其中 orderIdbeginTimefinishTime 作为区分字段
  • /getLongestNOrdersByDuration(n: int, startTime: datetime, endTime: datetime): Order[]
    检索在startTimeendTime 之间开始的最长N 个订单,
    按持续时间finishTime - beginTime 衡量
  • /getShortestNOrdersByDuration(n: int, startTime: datetime, endTime: datetime): Order[]
    检索在startTimeendTime 之间开始的最短N 个订单,
    按持续时间finishTime - beginTime 衡量

【问题讨论】:

  • 您能否进一步评论您所说的“不允许使用市场上的任何技术”是什么意思?我会看一下流处理和事件驱动解决方案的概念。可以将订单视为存储在事件存储中的事件。流式处理允许您在事件发生时持续分析事件,从而在欺诈尝试的情况下为相关方触发其他事件。
  • 我不确定您是否可以考虑像 Kafka 这样的解决方案?它能够满足可扩展性、一堆机器和 10M 写入/天的设计约束(当然取决于硬件规格和集群中的节点数量)。如果不允许评估此类解决方案,我想知道为什么不呢?
  • @KDW 这是一个人为的限制,因为这个问题是一个面试问题并且测试我们自己弥补它的能力

标签: architecture distributed-system system-design distributed-database


【解决方案1】:

看看使用druid数据库。如果你时间序列数据

  • 随着数据量的增长,它应该可以很好地扩展
  • 可以有效回答时长查询

https://druid.apache.org/ - 已在财富 500 强公司中大规模用作分析数据库

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2019-07-19
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 2013-08-07
  • 2020-09-01
  • 1970-01-01
相关资源
最近更新 更多