【问题标题】:SQL Server vs. No-SQL DatabaseSQL Server 与无 SQL 数据库
【发布时间】:2017-09-15 08:26:36
【问题描述】:

我继承了旧的内容交付系统,我需要重新设计和重新构建它。内容由内容供应商(例如 Sony Music)提供,并由旧版 .NET 应用程序摄取到 SQL Server 数据库中。

每个内容都有一些共同的属性(例如标题和艺术家姓名)以及一些特定于内容类型的属性(例如 MP3 文件的比特率和视频文件的帧率)。

此信息存储在关系数据库中的多个表中。这些表的某些字段中可能有空值,因为这些字段可能不属于内容的属性。数据库一直处于写入操作状态,因为内容摄取系统不断从供应商处接收内容文件,然后将其元数据添加到数据库中。

此外,还有一个面向公众的网络应用程序,可让最终用户购买提取的内容(例如音乐、视频等)。这个 Web 应用程序完全依赖于 Elasticsearch 索引。事实上,这个应用程序根本看不到数据库,而是使用 Elasticsearch 索引作为数据源。原因是 SQL Server 在文本搜索方面的执行速度和效率不如 Elasticsearch。

为了使数据库和 Elasticsearch 保持同步,有一个 Windows 服务从 SQL Sever 读取更新并将它们写入 Elasticsearch 索引!

如您所见,这里存在一些问题:

  1. 数据保存在关系数据库中,这使得数据难以管理。例如有一个包含 30 亿条记录的表,以键值对的形式存储每个内容的元数据!对我来说,使用 NoSQL 数据库或索引会更有意义,因为它们允许在其中存储不同格式的文档。

  2. Elasticsearch 索引需要与数据库保持同步。如果 Windows 服务因任何原因无法运行,则索引将不会更新。此外,当数据库中的插入/更新过多时,索引需要一段时间才能更新。

  3. 我们需要维护两个具有成本开销的数据源。

现在我的问题是:有没有具有这些特征的 NoSQL 数据库?

  1. 允许我在其中存储具有不同结构的文档吗?
  2. 提供良好的文本搜索功能和性能?例如模糊搜索等
  3. 是否允许同时对其数据进行多次更新?根据我的经验,Elasticsearch 在并发更新方面存在问题。
  4. 它可以在亚马逊 AWS 基础设施上安装和使用,因为我们的新产品将托管在 AWS 上。自动缩放和集群很重要。例如DynamoDB。
  5. 它将具有一种 GUI,以便支持人员或开发人员可以在一定程度上修改数据。

【问题讨论】:

    标签: database amazon-web-services amazon-dynamodb nosql


    【解决方案1】:

    DynamoDB 和 ElasticSearch 的组合可能适用于您的用例。

    DynamoDB 当然支持特征 1、3、4 和 5。

    现在有一个 Logstash Input Plugin for DynamoDB 可以与 ElasticSearch 输出插件结合使用,以使您的表和索引实时同步。 ElasticSearch 提供特征 2。

    【讨论】:

    • 非常感谢。您认为我可以使用 Amazon Cloud Search 代替 Elastic Search 进行全文搜索吗?
    • 我不明白为什么不这样做。如果有对应的 Logstash 输出插件,Logstash 输入插件允许您将数据导出到任何来源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2011-02-07
    相关资源
    最近更新 更多