【问题标题】:system architecture for real-time data实时数据系统架构
【发布时间】:2013-08-20 06:24:43
【问题描述】:

我工作的公司正在运行一个 C# 项目,该项目从大约 100 个网站爬取数据,将其保存到数据库并对该数据运行一些程序和计算。

这 100 个网站中的每一个都有大约 10,000 个事件,每个事件都保存到数据库中。

之后,保存的数据将被生成并聚合到 1 个大 xml 文件中,因此保存的这 10,000 个事件中的每一个现在都以 XML 文件的形式呈现在数据库中。

这个设计看起来像这样:

1) crawling 100 websites to collects the data and save it the DB.
2) collect the data that was saved to the DB and generate XML files for each event
3) XML files are saved to the DB

这篇文章的主要问题是选择保存的 XML 文件。

每个 XML 大约 1MB,考虑到大约有 10,000 个事件,我不确定 SQL Server 2008 R2 是否是正确的选择。

我尝试使用 Redis,保存效果非常好(而且速度很快!),但是获取这些 XML 的查询运行速度很慢(即使是在本地,所以网络流量不会成为问题)。

我想知道你的想法是什么?请考虑到它是一个实时系统,所以这里不能选择缓存。

欢迎任何想法。

谢谢。

【问题讨论】:

  • 如果将事件数据保存在事件表中并在数据存储时生成事件的XML文件,而不是将大型XML文件存储在数据库中,会不会节省资源?询问?这也将允许您为事件生成多种类型的格式,例如 HTML、JSON 等。它还允许您在任何时候需要对事件运行查询 - 例如未来 2 天内发生的事件等。
  • 那些 XML 每分钟被查询数百次,因此在运行时生成它们需要很长时间,几乎是不可能的。我更喜欢生成一次,将它们保存在数据库中,然后为我们所有的客户提供这些 XML。问题是,也许 SQL Server 2k8 R2 不是正确的选择。
  • 那么这些固定的 XML 文件和客户端查询会根据某种标准生成一个或多个吗?
  • @IdoLazar 我想你误解了我的意思。如果您每秒在数据库中查询 XML 数据数百次,则返回原始数据比返回大量 XML 数据要快得多。生成一次 XML 并缓存或 memcache 文件。做一个测试,对它进行基准测试。我可能是错的。或者,您可以尝试使用不同的数据格式,例如 JSON,它比 XML 更“笨重”。它可能会稍微提高性能。如果可能的话,我个人会重新计划和重新设计系统。当然,这在很多情况下是不可能的。
  • 我也同意 James...@ldoLazar.. 试一试,看看我希望这些 XML 是否每分钟被查询数百次更好地缓存在服务器应用程序中!!跨度>

标签: c# sql-server database-design architecture bigdata


【解决方案1】:

您可以尝试基于云的系统(Azure blobs 或 Amazon S3),而不是使用 DB,这似乎是一个完美的解决方案。看到这篇文章:azure blob storage effectiveness,同样的情况,除了你有 XML 文件而不是图像。您可以使用数据库来存储元数据,即 XML 的源和事件类型、云中的路径,但不能存储数据本身。

您也可以压缩文件。我不知道确切的方法,但它肯定可以在客户端处理。默认情况下,静态数据通常以压缩格式发送给客户端。

【讨论】:

    【解决方案2】:

    您的基本拱门似乎没有错,这是您对 redis 的看法,基本上,如果您设计正确的 key=>value,则从 redis 的检索不会很慢。

    例如,我必须在 redis 中存储 1 百万个对象,并说有一个 id 用于存储我的对象,这个键只是一个 guid,保存会非常快,但是当它谈到检索,如果我知道密钥,我是否知道“密钥”,它会很快,但如果我不知道,或者我试图检索我的数据不是基于密钥而是基于一些我的对象的价值,然后当然会很慢。 关键是 - 当涉及到检索时,您应该只针对“密钥”而不是其他任何东西,因此将您的密钥设计为本身就是一个预先计算的值;因此,当我需要从 redis/memcahce 获取一些数据时,我可以制作 KEY,然后单击一下即可获取数据。

    如果您能提供更多详细信息,我们将能够为您提供更好的帮助。

    【讨论】:

      【解决方案3】:

      您的问题缺少一些细节,例如您的数据需要在数据库中保留多长时间等等……

      如果您已经拥有原始数据,我会避免将 XML 存储在数据库中。为什么不拥有一个可以查询数据库并按需生成 XML 报告的应用程序呢?这将为您节省大量空间。

      每天 10GB 的数据是 SQL Server 2008 R2 可以通过正确的硬件和良好的结构优化来处理的。您需要调查标准版是否足够,或者您必须使用企业或数据中心许可证。

      无论如何,答案是肯定的——SQL Server 能够处理如此大量的数据,但我也会检查其他解决方案,看看是否有可能以任何方式降低成本。

      【讨论】:

        猜你喜欢
        • 2010-09-09
        • 2016-07-02
        • 1970-01-01
        • 2010-12-17
        • 2014-01-08
        • 1970-01-01
        • 2011-01-28
        • 2022-08-20
        • 2010-10-07
        相关资源
        最近更新 更多