我所工作的公司正在运行一个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的查询工作非常慢(甚至在本地,因此网络流量不会成为问题)。
我想知道你的想法是什么?请考虑到它是一个实时系统,因此缓存不是一个选项。
任何想法都会受到欢迎。
感谢。
答案 0 :(得分:1)
您可以尝试基于云的系统(Azure blob或Amazon S3),而不是使用数据库,它似乎是一个完美的解决方案。看到这篇文章:azure blob storage effectiveness,同样的情况,除了你有XML文件而不是图像。您可以使用DB来存储元数据,即XML的源和事件类型,云中的路径,而不是数据本身。
您也可以压缩文件。我不知道确切的方法,但它肯定可以在客户端处理。静态数据通常默认以压缩格式发送给客户端。
答案 1 :(得分:1)
您的问题缺少一些细节,例如数据需要保留多长时间等等......
如果您已经拥有原始数据,我会避免在数据库中存储XML。为什么没有一个应用程序将查询数据库并按需生成XML报告?这将为您节省大量空间。
每天10GB的数据是SQL Server 2008 R2可以通过正确的硬件和良好的结构优化来处理的。您需要调查标准版是否足够,或者您必须使用企业或数据中心许可。
在任何情况下答案都是肯定的 - SQL Server能够处理这些数据,但我也会检查其他解决方案,看看是否可以以任何方式降低成本。
答案 2 :(得分:0)
你的基本拱门似乎没有错,它是你认识到redis的方式,基本上如果你设计了你的key =&gt;值,那么redis的检索就不会慢。< / p>
对于ex-let说我必须在redis中存储1 mil对象,并说有一个id我要存放我的对象,这个键只是一个guid,保存会很快,但是当它来检索,我知道“钥匙”,如果我知道钥匙它会很快,但如果我不知道它或我试图检索我的数据不是基于密钥,而是基于一些在我的对象中的价值,然后当然它会很慢。 关键是 - 当涉及到检索时,你应该只针对“密钥”而不是其他任何东西,所以设计你的密钥就像预先计算的值一样;因此,当我需要从redis / memcahce获取一些数据时,我可以制作KEY ,只需点击一下即可获取数据。
如果您可以提供更多详细信息,我们将能够为您提供更好的帮助。