【问题标题】:What is the best method to extract a recurring blob data and put in another table ? - SQL提取重复 blob 数据并放入另一个表的最佳方法是什么? - SQL
【发布时间】:2019-01-12 05:28:12
【问题描述】:

我正在(.NET 框架,如果有帮助的话)为以下场景开发一个新网页。每天,我们都会收到一份出租车司机报告。

 Date   |  Blob 
-------------------------------------------------------------
15/07   |  {"DriverName1":"100kms", "DriverName2":"10kms", "Hash":"Value"...}
16/07   |  {"DriverName1":"50kms", "DriverName3":"100kms", "Hash":"Value"}

请注意,“Blob”是以 json 格式接收的实际数据 - 包含有关驾驶员在特定日期行驶的距离的信息。

我编写了一个服务,它读取上表并进一步分解并将其放入如下新表中:

Date  |  DriverName   | KmsDriven

15/07    DriverName1     100
15/07    DriverName2      10
16/07    DriverName3     100
16/07    DriverName1      50

通过填充它,我可以轻松地进行以下查询:

  1. 那天有多少司机开车。

  2. “DriverName1”在该周的表现如何,等等,

我的问题是:

  1. .NET / SQL world 中是否有任何内容可以具体解决这个问题,或者让我知道我是否在这里重新发明轮子。
  2. 这是使用Blob 数据的正确方法吗?
  3. 这里是否有任何设计模式需要遵守?

【问题讨论】:

    标签: sql .net sql-server database-design relational-database


    【解决方案1】:
    1. .NET/SQL 世界中是否有任何东西可以专门解决这个问题或 如果我在这里重新发明轮子,请告诉我。

    嗯,有可用的 JSON 解析器,例如 Newtonsoft's Json.NET。或者您可以使用SQL Server's own functions。从 JSON 中提取单个值后,您可以将它们写入相应的列(在您的新表中)。

    1. 这是使用 Blob 数据的正确方法吗?

    没有。它违反了atomicity的原则,因此违反了第一范式。

    1. 这里有什么设计模式需要遵守吗?

    我不确定“模式”,但我不明白在这种情况下为什么需要 BLOB。

    假设数据是统一的(即它始终具有相同的字段),您只需声明所需的列并直接写入它们(正如您已经建议的那样)。

    否则,您可以考虑使用 SQL Server 的 XML data type,这将使您能够提取 XML 文档中的某些部分,或者插入新部分而不替换整个文档。

    【讨论】:

    • 这里需要Blob,因为发送数据的相应系统没有处理逻辑或智能。 有什么可以改进我的第二张桌子的设计吗?它似乎拥有大量随时间呈指数增长的数据。
    • 您可以考虑将驱动程序名称提取到一个单独的表中,然后只存储它们的整数 ID,但这在插入过程中需要稍微复杂的逻辑(您必须检查驱动程序是否存在)。顺便说一句,它的增长速度不会比 BLOB 表快,所以我认为这不是问题。我们在谈论什么样的每日交易量?
    • 每天我们会收到一个包含 1000 个驱动程序详细信息的 Blob... 意思是,在 'n' 天数内,我将在该新表中拥有 'n*1000' 条记录.. 这是否意味着迁移到 no-sql 数据库是合格的候选人。
    • 另外,请告知将“Id”保存在单独的表中有何帮助?
    • 所以 3 年内有一百万行,是取舍还是取舍?关系数据库应该能够很好地处理这个问题。 ID 比驱动程序名称短,所以它会节省一些空间,假设大多数驱动程序重复。
    猜你喜欢
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多