是否可以直接向Azure Blob或Azure Block Storage Blob创建流对象。
IE
# Base tables
SELECT * FROM queue;
SELECT * FROM job;
SELECT * FROM queue_job;
# Jobs needing a reservation
SELECT j.*
FROM job j
WHERE NOT EXISTS (SELECT j.id FROM queue_job qj WHERE qj.job_id = j.id);
# Reserved Queues
SELECT q.*, qj.*, j.* FROM queue q
JOIN queue_job qj ON (qj.queue_id = q.id)
JOIN job j ON (j.id = qj.job_id)
WHERE NOW() BETWEEN qj.startAt AND qj.endAt;
# Historic Reservations
SELECT q.*, qj.*, j.* FROM queue q
JOIN queue_job qj ON (qj.queue_id = q.id)
JOIN job j ON (j.id = qj.job_id)
WHERE NOW() > qj.endAt;
# Available Queues is ALL active queues EXCEPT Reserved Queues
SELECT q.* FROM queue q WHERE q.status = 1 AND q.id NOT IN
(SELECT q.id
FROM queue q JOIN queue_job qj ON (qj.queue_id = q.id)
WHERE NOW() BETWEEN qj.startAt AND qj.endAt);
这将允许进行一些很棒的交互,例如将数据库索引存储在蔚蓝的blob中,而无需将其拉到本地。
答案 0 :(得分:1)
不确定是否可以回答您的问题,但是您可以从blob读取一定范围的字节。直接使用REST API时,可以在Range
或x-ms-range
标头中指定要读取的字节。
使用C#SDK时,您可以使用DownloadRangeToStream
方法,例如:
using (var ms = new MemoryStream())
{
long offset = 200;
long bytesToRead = 1024;
blob.DownloadRangeToStream(ms, offset, bytesToRead);
}
答案 1 :(得分:0)
如果您的问题是“我可以将流与Azure Blob一起使用”,是为了避免在任何时候都需要将整个Blob的大小保存在内存中,那么答案是肯定的。
例如,根据answer here,在读取块Blob时,可以使用诸如CloudBlob.OpenReadAsync
之类的方法将Blob作为流句柄进行访问。默认缓冲区大小为4MB,但可以通过StreamMinimumReadSizeInBytes之类的属性进行调整。在这里,我们将Blob流复制到另一个打开的输出流:
using (var stream = await myBlockBlob.OpenReadAsync(cancellationToken))
{
await stream.CopyToAsync(outputStream);
}
类似地,您可以write a stream直接进入Blob存储:
await blockBlob.UploadFromStreamAsync(streamToSave, cancellationToken);