Neo4j 帮助照片整理服务在 1.2 PB 的数据中实现关系货币化

挑战

Albelli 为用户提供从多个来源将照片同步到一个位置的功能。该软件根据各种因素(如日期、时间和位置)自动将照片整理到事件中,并以用户友好的时间轴方式显示,使客户不必对数千张照片进行分类和整理。客户可以完全控制共享选项,并可以决定哪些相册是公开的,哪些是私人的。

上传和整理照片后,用户可以购买各种产品,从相册到日历、马克杯和帆布肖像应有尽有。

由于照片数量庞大(有超过一百万用户,平均每人拥有 2000 张照片),以及文件大小与每个照片关联的所有描述符相结合,该公司正在处理海量数据。

该公司仍在使用 Microsoft SQL Server,这是一种关系型数据库,它很笨拙且速度慢,因为需要大量的 JOIN 来执行基于关系的查询。很明显,他们需要在混合中添加另一个数据库的功能,以克服这些数据关系挑战。

开发团队从头开始,认识到他们的领域由照片和用户之间的类似图的关系组成,他们知道将这种类似图的领域转换为 SQL Server 并不合适。因此,他们决定与 Neo4j 启动一个概念验证项目。

“如果平均照片收集用户有 2000 张照片,我们如何处理每张照片上的数十个节点,并保持产品的快速和流畅?”Albelli 首席技术官 Josh Marcus 说。“这就是我们发现的最大技术挑战。

解决方案

在峰值时,该团队使用了多达 700 台运行在最高速度的 AWS EC2 实例,持续了一个半月,将包括 5 亿张图像和客户数据在内的 1.2 PB 数据从本地转移到云存储。迁移涉及多达 5 台配备齐全的 Neo4j 服务器,并且在系统之间发送了超过 100 亿条消息。在此过程中,他们还从每张照片中提取了日期、时间和位置信息,以便将其与其他照片关联起来。

“Neo4j 的巨大优势在于,我们能够专注于对数据的建模以及如何最好地为客户提供服务,而不是苦苦思索如何构建表和 JOIN,”Marcus 说。“它也只需要很少的编码,因此我们能够专注于客户。”

最终,他们的数据库总共有 10 亿个节点、41 亿个属性和 26 亿个关系,Neo4j 充当中央数据库。除了 Neo4j 之外,Albelli 在其架构中还使用了其他数据库技术,包括 AWS、Redis、DynamoDB、Aurora 和 Microsoft SQL Server,这使他们能够利用多语言持久化方法。

下载案例研究