关于在 c# 中处理来自 Web 的大数据的理论
本文关键字:Web 数据 理论 处理 | 更新日期: 2023-09-27 18:37:21
我是处理大型数据文件的新手我想从有 13 列和大约 150 万行的互联网资源中提取在提取过程中,我每分钟提取大约 5000 行数据(API 限制)我正在用 c# 编码,非常感谢一些助手我将数据保存在哪种类型的数据存储中。数组?叠?节点?如果有人能为我提供一个很棒的解决方案
多谢!
这实际上取决于您之后将如何处理这些数据(包括您是否实际上同时需要内存中的所有数据)。
如果可能的话,并且你的数据中有一个规范化的键(或者可以从中构建一个好的哈希),我会为它使用一个HashSet
,因为它在内存和性能方面都很有效,如果哈希值很好,它会在查找时接近 O(1) 性能。
请记住,默认情况下可以在 .NET 应用程序中存储的最大对象大小为 2gb(我认为如果以 64 位为目标,则可以在 .NET 4.5 上覆盖此限制),因此如果您需要更多,则需要不同的对象并批量操作。
150 万行并不能说明很多问题:这些"行"的大小可能是 10 字节,或者每行几兆字节,
例如,您可以轻松地嵌入RavenDB,并将每一行作为对象推送。性能应该不是问题,您最终会得到安全且可查询的数据源(例如,如果您需要快速找出已经获得的数据,以防您必须重新启动数据下载)。
以下是嵌入 RavenDB 的方法
我认为最大的问题是你真的不想丢失你已经下载的数据,因为你受到API的限制。
也许你根本不需要存储数据。
看看反应式扩展
http://msdn.microsoft.com/en-us/data/gg577609.aspx
如果可以使用 Observerable.Aggregate 方法
以动态处理聚合,因此无需在读取过程后重新扫描所有记录。
还
如果内存消耗小于 1GB,您可以使用List<YourDataRecordType>
(根据我的经验)。
如果您以后需要未知的复杂查询和/或持久数据存储,只需使用 SQLite