我有一个Windows Azure托管的WCF服务作为“云服务”。服务启动时,需要将文件/磁盘中的数据填充到其内存中,以便快速访问(换句话说,缓存)。现在我正在使用像C:\ Documents \ Filestoprocess文件夹,以便WCF调用该文件夹并在其内存中的该文件夹中填充数据数据。我有5000个小文件。我如何在Azure中执行此操作?有没有可以在WCF中调用的文件夹路径,以便WCF调用这些文件并打开每个文件并将每个数据保存在文件中?我并不是在通过使用带宽的网络来寻找复杂的Blob访问。我正在寻找从自己的公共Web地址上运行的WCF“云服务”对这些文件的简单磁盘I/O访问。Azure WCF访问磁盘文件
回答
Blob访问并不复杂。事实上,您可以从blob存储到本地磁盘单独下载一个zip文件,将其解压缩,然后从这5,000个小文件中填入wcf服务。
结账this msdn page记录DownloadBlobToFile()
。基本部分:
CloudBlobClient blobClient =
new CloudBlobClient(blobEndpoint, new StorageCredentialsAccountAndKey(accountName, accountKey));
// Return a reference to the blob.
CloudBlob blob = blobClient.GetBlobReference("mycontainer/myblob.txt");
// Download the blob to a local file.
blob.DownloadToFile("c:\\mylocalblob.txt");
现在:我不同意保存到C:上的根文件夹。相反,你应该抓住一些本地存储(易于配置)。一旦你在你的角色配置配置本地存储,就问我的角色的环境吧,并要求根路径:
var localResource = RoleEnvironment.GetLocalResource("mylocalstorage");
var rootPath = localResource.RootPath;
注:由于@KingPancake提到的,你可以使用蔚蓝的车程。但是:请记住,Azure驱动器只能由一个实例写入。您需要为其他实例创建其他快照。我认为你简单地使用一个简单的blob,复制你的文件(作为单个zip文件或单个文件),然后从那里开始。
您提到了对网络带宽的关注。您不需要在同一个数据中心内支付带宽费用。另外:速度非常快:每个内核100Mbps。因此,即使使用Small实例,当您转到较大的实例大小时,您也可以非常快速地复制文件。
最后一个想法:在不使用blob存储或Azure Drives(作为vhd在blob存储中安装)的情况下,唯一能够访问您的5,000个文件的其他方法是从外部源或bundle下载文件他们与您的Windows Azure软件包(然后他们会出现在您的应用程序的文件夹中,无论你在他们的任何子文件夹下)。捆绑有两个缺点:
- 更长的时间来上传你的部署包因添加了大小
- 无力改变任何单个文件而无需重新部署软件包。
通过存储在blob中,您可以轻松更改小文件中的一个(或全部),而无需重新部署代码 - 您只需指示它从blob存储重新读取或重新启动实例所以他们会自动下载新文件。
您应该尝试使用云存储服务来存储数据,就好像您写入本地文件系统一样,它可以在重新启动服务或重新启动服务时销毁。
您可以使用Azure驱动器服务进行研究,就像创建磁盘潜水一样。它位于blob存储之上。
但如果你真的想要写和本地文件系统中读取数据看看这篇博客http://blog.codingoutloud.com/2011/06/12/azure-faq-can-i-write-to-the-file-system-on-windows-azure/
它谈论设置您的服务定义,允许写入到本地文件系统。
根据on the size of your instances您将得到一个非暂存磁盘,您可以在其中存储此类临时数据。对于一个小型实例,最小值为20GB。您不应直接访问磁盘,但需要使用local resource,而不是您可以在your service definition文件或Visual Studio中配置(双击Web/Worker角色)。
这个存储是非永久性的,这意味着如果你删除了你的部署,如果你减少了实例的数量,在出现硬件问题的时候......你把这里保存的所有数据都丢失了。如果你想保留你的文件,你应该使用blob存储。但在你的情况下,你需要这些文件作为某种缓存机制,本地资源是完美的。
如果您的目标是缓存数据,您可能需要查看Windows Azure中包含的缓存功能:Caching in Windows Azure
- 1. Azure托管磁盘。访问底层blob?
- 2. 处理/访问磁盘上的文件
- 3. Azure Blob vs文件与磁盘存储
- 4. LBA级磁盘访问
- 5. 分析磁盘访问
- 6. Azure磁盘速度
- 7. Azure磁盘数据丢失
- 8. Azure父/子差异磁盘
- 9. Azure删除孤立磁盘
- 10. Azure的磁盘管理
- 11. 如何监控某个文件的磁盘访问?
- 12. 从服务器根目录中的磁盘访问文件
- 13. 在写入文件时减少磁盘访问次数C
- 14. 尝试访问磁盘上的文件时无效url
- 15. 写入磁盘:文件访问被拒绝
- 16. 从磁盘加载文件问题
- 17. Java NIO和Windows磁盘访问
- 18. Windows上的原始磁盘访问8
- 19. 从BufferedStream获取磁盘访问次数
- 20. ehcache磁盘存储位置和访问
- 21. 如何访问网络中的磁盘
- 22. 锁定互斥锁vs访问磁盘
- 23. 数据大小和磁盘访问
- 24. 使用C/C++访问RAW磁盘
- 25. 频繁访问磁盘的需求?
- 26. 内存FILE *(无磁盘访问)
- 27. 从iPhone SDK访问iPhone磁盘
- 28. APK文件磁盘上不
- 29. 文件写入磁盘
- 30. Azure创建数据磁盘并将文件复制到它