【发布时间】:2017-09-15 08:26:36
【问题描述】:
我继承了旧的内容交付系统,我需要重新设计和重新构建它。内容由内容供应商(例如 Sony Music)提供,并由旧版 .NET 应用程序摄取到 SQL Server 数据库中。
每个内容都有一些共同的属性(例如标题和艺术家姓名)以及一些特定于内容类型的属性(例如 MP3 文件的比特率和视频文件的帧率)。
此信息存储在关系数据库中的多个表中。这些表的某些字段中可能有空值,因为这些字段可能不属于内容的属性。数据库一直处于写入操作状态,因为内容摄取系统不断从供应商处接收内容文件,然后将其元数据添加到数据库中。
此外,还有一个面向公众的网络应用程序,可让最终用户购买提取的内容(例如音乐、视频等)。这个 Web 应用程序完全依赖于 Elasticsearch 索引。事实上,这个应用程序根本看不到数据库,而是使用 Elasticsearch 索引作为数据源。原因是 SQL Server 在文本搜索方面的执行速度和效率不如 Elasticsearch。
为了使数据库和 Elasticsearch 保持同步,有一个 Windows 服务从 SQL Sever 读取更新并将它们写入 Elasticsearch 索引!
如您所见,这里存在一些问题:
数据保存在关系数据库中,这使得数据难以管理。例如有一个包含 30 亿条记录的表,以键值对的形式存储每个内容的元数据!对我来说,使用 NoSQL 数据库或索引会更有意义,因为它们允许在其中存储不同格式的文档。
Elasticsearch 索引需要与数据库保持同步。如果 Windows 服务因任何原因无法运行,则索引将不会更新。此外,当数据库中的插入/更新过多时,索引需要一段时间才能更新。
我们需要维护两个具有成本开销的数据源。
现在我的问题是:有没有具有这些特征的 NoSQL 数据库?
- 允许我在其中存储具有不同结构的文档吗?
- 提供良好的文本搜索功能和性能?例如模糊搜索等
- 是否允许同时对其数据进行多次更新?根据我的经验,Elasticsearch 在并发更新方面存在问题。
- 它可以在亚马逊 AWS 基础设施上安装和使用,因为我们的新产品将托管在 AWS 上。自动缩放和集群很重要。例如DynamoDB。
- 它将具有一种 GUI,以便支持人员或开发人员可以在一定程度上修改数据。
【问题讨论】:
标签: database amazon-web-services amazon-dynamodb nosql