免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

使用 F# Azure Storage Type Provider 探索 Azure

  • 2016-05-17
  • 本文字数:1397 字

    阅读完需:约 5 分钟

Azure Storage Type Provider 提供对 Azure 存储数据资源的静态类型访问: BLOB 以及队列。项目的维护者Isaac Abraham 最近和大家交流了如何使用type provider和这些数据资源交互

对于所有数据资源来说,对type provider 的设置都是相同的:

复制代码
open FSharp.Azure.StorageTypeProvider
// Connect to a live account using a two-part name and key.
type Storage = AzureTypeProvider<"name", "key">

Blob

Azure Blob storage 是将文件数据存储在云端的一项服务。storage type provider 通过下面的示例提供对容器和文件的静态类型访问:

复制代码
let container = Storage.Containers.samples
let theBlob = container.``folder/``.``childFile.txt``
printfn "Blob '%s' is %d bytes big." theBlob.Name theBlob.Size
let totalSize =
[ container.``file1.txt``
container.``file2.txt``
container.``file3.txt``
container.``sample.txt`` ]
|> List.sumBy(fun blob -> blob.Size)
printfn "These files take up %d bytes." totalSize


Azure Table storage 将 NoSQL 键值存储托管于 Azure 上。NoSQL 数据库是无模式的,表的行不需要包含相同属性。Azure Table storage 支持在有限范围内的查询,可以通过查询键或者属性来得到相对应的行。它实现了OData 协议,这对查询非常重要。

storage type provider 可以提供基础的 CRUD 操作,对管理数据很有必要。有几种办法进行查询,以下的例子是一个简单的键查询:

复制代码
let employeeTable = Storage.Tables.employee
let firstEmployee = employeeTable.Get(Row "1", Partition "women")
let allWomen = employeeTable.GetPartition("women")

type provider 提供了 IQueryable 实现来满足属性查询。然而,由于 Azure Table 支持的查询操作受限,这个解决方案也是有限制的。一种可能的选择是使用 type provider 自动生成的条件:

复制代码
let longerQuery = employeeTable.Query()
.``Where Years Working Is``.``Greater Than``(14)
.``Where Name Is``.``Equal To``(“Fred”)
.``Where Is Manager Is``.True()

队列
Azure Queue storage 是消息服务,基于 REST 方式访问。Queue storage 还支持管理异步任务和搭建过程工作流。

相比较于一个传统的队列 API,type provider 并没有太多优势,它不能提供模式或是拓展查询。然而,它为开发和调试提供了几个功能。使用 F# Interactive 就可以直接从 IDE 实现查询。

复制代码
let queue = Azure.Queues.``sample-queue``
async {
printfn "Enqueuing a message!"
do! queue.Enqueue("Hello from Azure Type Provider")
printfn "Queue length is %d." (queue.GetCurrentLength())
// Get the message back off the queue
let dequeuedMessage = (queue.Dequeue() |> Async.RunSynchronously).Value
printfn "%A" dequeuedMessage
printfn "Deleting the message."
do! queue.DeleteMessage dequeuedMessage.Id
printfn "Queue length is %d." (queue.GetCurrentLength())
} |> Async.RunSynchronously

Azure Storage Type Provider 是一个开源的项目,可以在GitHub 上获得。

查看英文原文 Exploring Azure with F# Azure Storage Type Provider


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-05-17 19:001001
用户头像

发布了 218 篇内容, 共 67.5 次阅读, 收获喜欢 76 次。

关注

评论

发布
暂无评论
发现更多内容

最近的一些人生感悟

小智

人生 哲学

如何阅读源码?

武培轩

Java 源码 面试 进阶 后端

在谈判中,你有哪些属于自己的独特的方法和技巧?

Yolanda

决定我们认知深度的究竟是什么?

石君

深度思考 方法论 连接

Golang 真的好用吗?

极客时间

编程语言 Go 语言

敏捷开发 | 张三与需求管理

易成研发中心

敏捷开发 需求管理

程序员陪娃漫画系列——修龙头

孙苏勇

程序员 生活 陪伴 漫画

世界知识产权日碎碎念

Yin

成长 随笔 知识产权

微信朋友圈为什么没有阅读数?

彭宏豪95

微信 产品 产品设计

我为什么选择infoq写作平台

三爻

「超级右键」

非著名程序员

macos 程序员 效率工具 软件 Mac

知乎开发了一个搜索引擎

红泥

搜索引擎 百度 知乎

程序员5分钟:你了解32位带符号的整型吗?

顾仲贤

程序员

别总说CMS、G1,该聊聊ZGC了

猿人谷

CMS G1 ZGC JVM

很不幸,自动化测试永远只能是必要非充分条件

刘华Kenneth

DevOps 敏捷 自动化 测试 金字塔

聊聊苹果公司技术部门的宫斗和冷战

赵钰莹

程序员 外包 apple

回"疫"录(3):让人怀念的普通一天

小天同学

疫情 回忆录 现实纪录 纪实

程序员5分钟:你的程序占用了多少内存?

顾仲贤

程序员

爱他,就让他走?

Selina

团队管理 领导力 团队协作

前端如何搞监控总结篇

大前端洞见

大前端 监控 全链路监控

小论互联网项目管理

南方

项目管理 互联网 个人成长 碧海潮生曲

Java并发编程系列——线程

孙苏勇

Java 并发编程 线程

基于Kubernetes的多云和混合云

倪朋飞

云计算 架构 Kubernetes 微服务 Service Mesh

Java并发编程系列插曲——对象的内存结构

孙苏勇

Java 内存模型 面向对象 ClassLayout

克制文章长度

changyou

加班能解决交付的期望么?

拖地先生

项目管理 领导力 管理 时间管理

除了负载均衡的算法,你还应该知道这些

松花皮蛋me

Java 负载均衡 分布式

程序员陪娃漫画系列——看医生

孙苏勇

程序员 生活 陪伴 漫画

程序员都应该了解的运维知识经验

松花皮蛋me

DevOps 分布式 运维

漫谈哲学与编程

keelii

编程 哲学

随手记备忘录的好习惯

changyou

使用F# Azure Storage Type Provider探索Azure_.NET_Pierre-Luc Maheu_InfoQ精选文章