0

我工作的公司正在运行一个 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 的查询工作速度很慢(即使是在本地,所以网络流量不会成为问题)。

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

任何想法都会受到欢迎。

谢谢。

4

3 回答 3

1

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

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

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

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

于 2013-08-19T13:52:14.720 回答
1

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

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

于 2013-08-18T10:49:57.773 回答
0

你的基本拱门似乎没有错,它是你感知redis的方式,基本上如果你设计你的key=>value正确,那么从redis的检索就不可能很慢。

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

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

于 2013-08-19T12:43:44.327 回答