初创公司常见的数据模型错误
数据建模很难。以下是您在开发模型时应避免的一些错误。
在帮助几家初创公司构建分析技术栈之后,人们会开始看到一些模式。有时这些模式是令人愉快的:几乎每个人都喜欢从一无所知到对上周发生的事情有一个模糊概念的时刻。其他模式则不那么令人满意,通常涉及围绕数据模型或Schema的决策。
值得注意的是,我们将在下面讨论的反模式是针对初创公司的。其中一些模式实际上对于后期公司来说是好主意,但对于规模小、尚未达到产品市场契合度、资源受限的初创公司来说,这些是您不需要犯的错误。
事不宜迟,以下是早期分析中五大痛点来源:
1. 使用测试数据或虚假数据污染数据库
无论是测试账户、员工账户、不同的数据程序,还是通过猫科动物心灵感应收到的订单,太多的公司包含了需要在大部分查询中忽略某些事件或交易的数据。
通过使用测试数据污染您的数据库,您就已经给公司所有的分析(以及内部工具构建)施加了一项额外成本。您可以权衡这项成本与事务效率或开发者生产力。有时这项成本是值得的,有时则不然。对于大型公司而言,事务效率是一个足够重要的目标,因此您可以承担花费几位工程师或分析师的时间来清理结果。
如果您是小型公司,您很可能无法承担这项成本,并且您应该在其他地方进行权衡。
2. 事后重构会话
关于用户行为、满意度和价值的重要问题,有相当一部分都围绕着会话指标展开。无论它们被称为“会话”、“对话”、“支持联系”或其他什么,这些指标都指与用户相关的一系列离散事件,这些事件应被归类并视为一个单一概念。然而,令人担忧的是,初创公司的数据模型通常未能以业务词汇捕获这一基本概念。
会话通常是在事后(即,在事实发生之后)重构的,这通常会导致许多脆弱性和痛苦。会话的具体定义通常会随着应用程序本身的变化而变化。此外,客户端上或处理客户端请求的服务器上,往往有许多围绕用户会话的上下文。在您的应用程序中分配会话、支持工单或对话 ID 远比事后尝试重构会话要容易得多。
3. 软删除
在大规模数据量下,在高负载的数据库中删除行是一件糟糕的事情。软删除是一种常见的 Schema 工具,可以缓解删除操作以及随后的压缩(或清理)带来的性能影响。此外,软删除还使得取消删除行以恢复已删除数据变得容易。
另一方面,软删除要求每一个读取查询都排除已删除的记录。如果您只考虑应用程序数据调用,这可能看起来没那么糟糕。然而,当应用于您将运行的所有分析查询时,这种排除操作很快就会成为一个严重的负担。此外,软删除引入了另一个不同用户可能做出不同假设的地方,这可能导致不一致的数字,您需要对此进行调试。
4. 滥用半结构化数据
半结构化数据(例如,编码为 JSON 的字段)在长时间内存在多种不同结构的情况下会很有用。随着数据库变大,半结构化数据还可以帮助避免在高读写负载下迁移大表的麻烦。
然而,半结构化数据在尝试从数据库中获取数据时也可能导致许多麻烦。通常,半结构化数据的 Schema 仅通过约定强制执行,可能会不可预测地更改,或因临时错误而偏离,并且通常需要大量的事后清理才能有用。
有时,半结构化数据字段是推迟考虑所需结构直到您编写完功能之后的借口。在这种情况下,您实际上拥有结构化数据,它只是未强制执行、容易出现错误,并且通常使用起来很痛苦。一个简单的测试:如果 JSON 字段的每个实例都具有相同的四个字段,那么您可能应该分解该结构。
5. “为工作选择合适的数据库”综合症
在一个公司的技术栈中存在大量不同数据库通常表明以下三种情况之一:
- 一家真正庞大、复杂的公司,拥有各种各样的需求和细分领域。
- 一个高效、顶尖的工程和运维团队,致力于解决非常困难的问题,需要高度优化应用程序的所有方面。
- (最常见的情况是)一个小型团队,不断在他们仅浅显理解的技术中灭火。
每增加一个数据库,您就会承担大量的运营开销。此外,每个额外的数据库都是另一组您需要放入分析数据库的数据。这些数据库将具有略微不同的语义、数据类型和自然数据模型,您需要对其进行整理。
因此,请抵制为了让一个小功能更容易实现而产生的冲动,因为那样会全面增加运营和分析的难度。
提示:让获取业务指标变得容易
在思考您的数据模型是否满足您的分析和事务需求时,确定以下几点会很有用:
- 业务关心的 10 个重要指标
- 应用程序中最常运行的 10 个更新查询
- 应用程序中最常见的 10 种读取模式
您正在寻找一种能够最大限度减少所有这些不同查询痛苦的数据模型。一般来说,业务指标的查询是最重要的,因此如果为应用程序更新和读取引入一点复杂性能够使业务指标的查询变得更容易,那就去做。您将最大限度地提高整体生产力,因为应用程序端的工作查询通常远少于常见分析或商业智能问题。
此外,应用程序的查询通常在源代码控制中完成,并进行自动化测试,通常更加稳固。而业务指标的查询通常分散,由多人编写,并且通常受控程度较低。因此,尽您所能,让您的业务轻松获取所需的指标,从而做出更好的决策。
下一篇:初创公司常犯的十大分析错误
在启动分析系统时,您会犯错误。以下是如何减少错误的方法。