10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

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

关注

评论

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

唯一一家!腾讯云数据库入选“科创中国”先导技术榜

科技热闻

云防火墙:防御企业上云“亿”点网络攻击

青云技术社区

MySQL是怎么保证redo log和binlog是完整的?

华为云开发者联盟

MySQL Binlog Redo Log WAL机制 日志逻辑序列号

解码北京冬奥沉浸式报道黑科技: 阿里云视频云「互动虚拟演播技术」

阿里云CloudImagine

阿里云 计算机视觉 音视频 视频云 冬奥会

保证业务高效运营 专有云虚拟网络是关键

百度开发者中心

资本热衷的垂直SaaS,如何能大有作为?

ToB行业头条

网络安全kali渗透学习 web渗透入门 Metasploit基本使用方法

学神来啦

全球首个开源车路协同数据集发布,促进学界业界跨界融合

百度开发者中心

MySQL是怎么保证redo log和binlog是完整的?

华为云开发者联盟

MySQL Binlog Redo Log WAL机制 日志逻辑序列号

阿里卖家 Flutter for Web 工程实践

阿里巴巴终端技术

flutter Web 客户端开发 ffw

腾讯WeTest开通微信视频号啦

WeTest

燃气表场景物联解决方案

😌

IoT 燃气

【Python】第三章(string)

謓泽

Python 2月月更

OpenHarmony移植:如何适配utils子系统之KV存储部件

华为云开发者联盟

LiteOS OpenHarmony utils KV存储部件

快上车!第十七届全国大学生智能汽车竞赛百度创意组来啦

百度大脑

盖世无双之国产数据库风云榜-2022年02月

墨天轮

数据库 GaussDB TiDB 国产数据库

【网络安全】Agent内存马的自动分析与查杀

H

网络安全 WEB安全

回声嘹亮 之 Go 的 Echo 框架 —— 上手初体验

宇宙之一粟

Go web Go 语言 2月月更

详解基于机器学习的恶意代码检测技术

华为云开发者联盟

机器学习 深度学习 静态分析 恶意代码 恶意代码检测

产品更新 | 云原生综合运维平台SchedulX V 0.2.0 已发布,支持部署服务至云服务器

星汉未来

| 从DevOps到BizDevOps, 研发效能提升的系统方法

阿里云云效

云计算 阿里云 DevOps 云原生 研发

2022中国化妆品行业发展趋势洞察

易观分析

化妆品行业

数字人民币 为经济添活力

CECBC

如何基于 Agora Android SDK 在应用中实现视频通话?

声网

人工智能 android 音视频

如何高效交付专有云?百度智能云有妙招

百度开发者中心

用了区块链技术,破产清算办案更透明了!

CECBC

博文干货|Apache InLong 使用 Apache Pulsar 创建数据入库

Apache Pulsar

开源 架构 云原生 Apache Pulsar apache 社区

频繁项集挖掘算法在告警关联中的应用

云智慧AIOps社区

算法 告警

大力发展区块链技术,做好数字经济“新基建”

CECBC

面试官:linux零拷贝的原理是什么?

CRMEB

Python代码阅读(第76篇):摄氏温度与华氏温度互转

Felix

Python 编程 阅读代码 Python初学者

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