写点什么

使用 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:001262
用户头像

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

关注

评论

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

药品安全追溯系统开发区块链技术

13828808769

安全 区块链+

DB-Engines 12月数据库排名: PostgreSQL拿下同期涨幅榜冠军,有望获得「2020年度数据库」荣誉?

华章IT

数据库 postgresql

Kubernetes 1.20发布,Release Logo变成一只猫

晓川

G20200388020528第二周作业

走走,停停……

TronChain波场链系统软件开发|TronChain波场链APP开发

系统开发

公安舆情分析重点人员管控系统搭建解决方案

t13823115967

智慧公安 舆情分析

mybatis快速入门,so easy啦

田维常

mybatis

排查指南 | 当 mPaaS 小程序提示“应用更新错误(1001)”时

蚂蚁集团移动开发平台 mPaaS

小程序 问题排查 mPaaS

2020 阿里云原生实战峰会即将开幕 云原生落地的正确姿势

阿里巴巴云原生

阿里巴巴 阿里云 开发者 云原生 实战

(G20200388020528)第一周练习

走走,停停……

区块链应用落地,区块链电子票据应用平台搭建

t13823115967

区块链+ 区块链应用 区块链落地开发

通过docker获取系统运行情况的实用命令

晓川

AR智能眼镜会成未来趋势

anyRTC开发者

人工智能 音视频 WebRTC RTC

大厂也在用的 6种 数据脱敏方案,严防泄露数据的 “内鬼”

程序员小富

Java 数据脱敏;

悟空活动中台-打造 Nodejs 版本的MyBatis

vivo互联网技术

Java 大前端 mybatis nodejs

为什么建议使用你 LocalDateTime ,而不是 Date?

Bruce Duan

LocalDateTime Date

一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

Bruce Duan

反爬虫组件 kk-anti-reptile

ZEGO即构科技荣获36氪【WISE2020中国新经济之王最具影响力企业】

ZEGO即构

《前端算法系列》数组去重

徐小夕

Java 面试 算法 大前端

从容应对11.11大促 京东智联云云硬盘做对了哪些事?

京东科技开发者

云计算 高可用 云硬盘

话题讨论 | 图解一致性哈希算法全小区局域网最通俗易懂

程序员柠檬

Swift性能优化分析

ios swift

即构科技肖传发:即刻构建在线教育的音视频互动场景

ZEGO即构

《迅雷链精品课》第十一课:区块链常用共识算法介绍

迅雷链

区块链

《算法问题整理》​.pdf

田维常

浅谈ToB市场精细化运营

Linkflow

营销数字化 客户数据平台 CDP 精细化运营

当我们谈前端性能的时候,我们谈的是什么

vivo互联网技术

性能优化 大前端 页面

数据结构与算法系列之散列表(一)(GO)

书旅

数据结构 算法 Go 语言

架构师训练营第一期 - 第十一周课后作业

卖猪肉的大叔

极客大学架构师训练营

Redis 如何实现点赞、取消点赞

Bruce Duan

Redis实现点赞

5种分布式事务方案与阿里的 Seata 中间件

Bruce Duan

分布式事务 seata

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