gpt4 book ai didi

c# - 访问 Azure 中的大文件

转载 作者:行者123 更新时间:2023-12-03 02:27:30 24 4
gpt4 key购买 nike

我有一个 winforms 应用程序,用户输入一些文本并尝试将其与大文件(大约 5GB)中以该输入开头的特定行(或行 block )进行匹配。

这些行按字母顺序排序,因此我执行二分搜索,并在 log(n) 时间内识别特定行,而不使用任何内存。为了更轻松地在文件中导航,所有行都具有相同的大小(用空格填充)。

        using (var file = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
long left = 0;
long right = fileLength / lineLength - 1;
byte[] buffer = new byte[lineLength];
bool found = false;

while (left <= right)
{
var middle = left + (right - left) / 2;
file.Position = middle * lineLength;
int read = file.Read(buffer, 0, lineLength);
string line = Encoding.UTF8.GetString(buffer, 0, read);
if (line.StartsWith(term))
{
found = true;
break;
}
else if (string.Compare(line, term) < 0)
{
left = middle + 1;
}
else
{
right = middle - 1;
}
}

if (found)
{
....

代码中唯一“昂贵”的操作是在文件的不同部分之间跳转的file.Position(总是在某行的开头),直到找到具体线路。但每次搜索的跳转次数不能超过 20 次(总行数的 log2)。winforms 版本非常快,因为文件与可执行文件位于同一台机器中。

我想使用 azure 函数将此工具移至 azure。我想继续使用相同的 FileStream 逻辑来访问文件。我怀疑 blob 存储不一定与 azure 函数位于同一台计算机中,因此 File.Read 可能是针对不同计算机的一些(缓慢的)http 调用,并使我的搜索速度慢了几个数量级。

我应该将大文件放在哪里,以便请求到达时可以快速搜索?该文件是否可以位于执行 azure 函数的同一台计算机中?

更新

是否可以将该文件(嵌入资源)包含在我的 azure 函数项目中?其大小限制是多少?

最佳答案

对 Blob(或其他云)存储的访问(读/写/...)通常作为 REST API 实现(而不是操作系统/文件系统 API,这就是 FileStream.read()) > 会使用)。您可以通过使用一些技巧(例如,如果您正在处理“File Share ”,则使用 FUSE 或静默发布的内容)来安装 blob/云存储来模拟文件系统,但支持和性能将非常值得怀疑,因为它是模拟并调用幕后 REST API。

<小时/>

可以使用 REST API 中的范围选项读取 blob 来实现相当于二分搜索(需要随机访问文件)。

  • 这是REST API (对于 ADLS Gen2,如果您使用的是 Gen1 或 Blob,请找到合适的)
  • 这里有一些关于如何 read a byte range 的说明从 blob 中的文件中取出。

所有语言 SDK 均构建在这些 REST API 之上。可能 C# SDK API 之一提供了一个包装器/参数来读取范围,因此您可以在代码中使用它。如果没有,那么您必须调用 REST API。

请注意

关于c# - 访问 Azure 中的大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66372693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com