
我们很高兴地向大家宣布,D1 Alpha版用户(包括任何Workers用户)可以通过以下命令立即使用全新存储后端创建新数据库:
$wrangler d1 create your-database–experimental-backend
在接下来的几周内,它将成为每个人的默认体验,但我们希望邀请开发人员立即开始尝试新版本的D1。我们也将进一步分享如何构建D1新存储子系统以及它如何从Cloudflare的分布式网络中受益。
我们来快速回顾一下:什么是D1?
D1是Cloudflare的原生无服务器数据库,在去年11月发布Alpha版。开发人员一直在使用Workers、KV、Durable Objects等构建复杂的应用程序,但是他们一致要求我们做一件事情:一个可以查询的数据库。
我们还收到一致的反馈:这个数据库应该基于SQL,自动缩放,并且(和Workers本身一样),采用全球(“Region:Earth”)复制方式。因此,我们接受了这些反馈并开始构建D1,SQLite为我们提供了一种熟悉的SQL方言、强大的查询引擎和经过最充分实战考验的代码库之一。
我们将D1的第一个版本以Alpha版进行了发布:这是我们公开开发的一种方式,可以直接从开发人员那里收集反馈,并更好地优先考虑重要的事情。名副其实,这个alpha版存在bug和性能问题,而且“理想路径”相当狭窄。
尽管如此,我们已经看到开发人员启动了数千个数据库,进行了数十亿次查询,流行的ORM(例如Drizzle和Kysely)增加对D1的支持,且Remix和Nuxt模板直接围绕它构建。
不断完善
如果您已经使用过Alpha版的D1:经过完善的版本将进一步刷新您对D1的已有认知。D1现已显著提速,我们刚将著名的Northwind Traders演示数据库迁移到使用我们的全新存储后端,速度提高了20倍:
我们的新架构还提高了写入性能:一个插入1000行(每行约200字节宽)的简单基准测试比先前版本的D1快大约6.8倍。
更大的批次(每批1万行,每行约200字节宽)看到更大的改进:达到10-11倍,而且新存储后端的延迟也明显更加一致。我们还没有开始优化总体写吞吐量,因此D1只会变得更快。
通过我们的新存储后端,我们不断将其性能与其他无服务器数据库进行基准测试。对一个50万行的键值对表进行查询(认识到基准测试本质上是合成的),D1的性能比流行的无服务器数据库Postgres快大约3.2倍:
我们运行了多次Postgres查询来预热页面缓存,然后采用服务器测量的中位数查询时间。后续开发中,我们将继续提高性能优势。
已有数据库的开发人员可以按照文档中的步骤将数据导入到由该存储引擎支持的新数据库中,方法是先将数据库导出,然后将其导入。
逐步优化D1的开发人员体验
我们还一直在努力改进D1的开发人员体验:
新增控制台界面,可直接从仪表板发出查询,更易开始使用和/或发出一次性查询。
正式支持JSON函数,通过JSON在数据库中直接查询。
Location Hints,允许影响leader(负责写入)在全球范围内的位置。
尽管D1是专为在Cloudflare Workers内原生运行而设计的,但我们意识到,在进行原型设计或仅探索一个数据库时,通常需要快速通过CLI或Web编辑器发出一次性查询。除了支持在wrangler内支持执行查询(和文件)外,我们还引入了控制台编辑器,用于发出查询、检查表格,甚至可以实时编辑数据:
JSON函数让您可以查询D1数据库TEXT列存储的JSON:这使您可以灵活地确定哪些数据与您的关系数据库模式严格相关,哪些不相关,同时仍然能够通过SQL查询所有数据(在数据到达您的应用程序之前)。
例如,假设您将最后登录时间戳以JSON数组格式存储在login_history TEXT列:我可以通过提供到其键的路径直接查询(和提取)子对象或数组项:
SELECT user_id,json_extract(login_history,’$.【0】’)as latest_login FROM users
D1对JSON函数的支持非常灵活,并利用了构建D1的SQLite核心。
当您首次使用D1创建数据库时,我们会根据您当前连接的位置自动推断位置。然而,某些情况下,您可能希望影响数据库的位置——也许您正在旅行,或者您的分布式团队不同于您预期大多数写入来自的地区。
D1对Location Hints的支持
#Automatically inferred based your location
$wrangler d1 create user-prod-db–experimental-backend
#Indicate a preferred location to create your database
$wrangler d1 create eu-users-db–location=weur–experimental-backend
Location Hints也可通过Cloudflare仪表板使用:
我们还发布了更多文档,不仅能帮助开发人员入门,还能利用D1的高级特性。未来几个月内,预计D1的文档将继续大幅增加。
合理的定价策略
自从宣布alpha版以来,已经有许多开发人员问到D1价格的问题,现在我们准备介绍一下定价。我们知道,在开始使用某个产品进行构建之前了解其定价很重要,这样您就不会在6个月后感到吃惊了。
简而言之:
我们准备宣布定价,以便您可以提前预估D1将为您的用例带来多少成本。最终定价可能会有所变化,但我们预计变化幅度会比较小。
我们将在今年晚些时候才开始计费,而且我们将提前通过电子邮件通知现有客户。在那之前,D1将依然免费使用。
D1将包括一个永远免费的级别,包括作为5美元/月Workers订阅的一部分使用,并根据读、写和存储量收费。
如果您已经订阅了Workers,那么您不会受到任何影响:在我们未来启用计费时,您的现有订阅将包括D1使用。
总结如下:
重要的是,当我们启用全球读取复制时,您将不需要支付额外费用,复制也不会使您的存储消耗倍增。我们认为内置、自动的复制很重要,开发人员不应该支付倍乘费用(副本x存储费),以使其数据库在每一个地方都能快速运行。
除此之外,我们希望确保D1具有无服务器产品定价的优点——可以根据需求进行自动缩放和按使用量付费,这样您就不需要尝试确定工作负载所需的CPU和/或内存数量,也不需要编写脚本在负载较低的时间段缩小基础架构规模。
D1的读取定价基于“读取单位”(每4KB读取)和“写入单位”(每1KB写入)的熟悉概念。查询(扫描)大约10000行,每行64个字节,将消耗160个读取单位。在“blog_posts”表中写入一个大的3KB行,其中包含大量Markdown,这将消耗3个写入单位。如果您为最常用的查询创建索引以提高性能并减少这些查询需要扫描的数据量,您还可以进一步减少计费。我们认为通过默认使快速路径更具成本效益是正确的方法。
在此需要强调的是:在开始收费前,我们将继续接受有关定价的反馈。
Time Travel
我们还引入了新的备份功能:时间点恢复,并将其称为“Time Travel(时间旅行)”,因为这就是它给人的感觉。Time Travel允许您将D1数据库恢复到过去30天内的任何一分钟,并且将内置于使用我们新存储系统的D1数据库中。我们预计在不久的将来为新的D1数据库开启Time Travel功能。
使Time Travel真正强大的地方在于,您不再需要惊慌地想“噢,等等,我在做这个重大更改之前是否备份了数据库?”——因为我们已经为您做了这件事。我们保留了对您的数据库所有更改的流(Write-Ahead Log),允许您通过按顺序重放这些更改,从而将您的数据库恢复到某个时间点。
这里是一个示例(API可能会有一些小的变化):
#Using a precise Unix timestamp(in UTC):
$wrangler d1 time-travel my-database–before-timestamp=1683570504
#Alternatively,restore prior to a specific transaction ID:
$wrangler d1 time-travel my-database–before-tx-id=01H0FM2XHKACETEFQK2P5T6BWD
尽管时间点恢复并非新的想法,但它通常是一个付费的附加功能,甚至根本不提供。在进行了删除或犯了错误之后才意识到应该打开它,通常为时已晚。
例如,想象一下我犯了这个经典错误:在一条UPDATE语句中忘记了WHERE:
–Don’t do this at home
UPDATE users SET email=’matt example.com’–missing:WHERE id=”abc123″
如果没有Time Travel,我只能祈祷最近运行了计划备份,或者记得在之前进行了手动备份。有了Time Travel,我可以将数据库恢复到在犯错误前一分钟左右的某个时间点(并希望下次能吸取教训)。
我们还在探索一些功能,以显示数据库状态的更大变化,包括使识别模式更改、表数、存储数据的重大变化,甚至特定查询(通过事务ID),以帮助您更好地了解恢复数据库的确切时间点。
路线图
那么D1的下一步?
·开放beta:我们正在确保,在将新的存储子系统作为所有“d1 create”命令的默认设置之前,在负载(和实际使用)下观察它的表现。即使是“beta”,我们对耐久性和可用性也有很高的要求,并且我们还意识到备份功能(Time Travel)对于人们信任一个新数据库是很重要的。接下来的几周内,欢迎关注Cloudflare博客以获取更多相关消息!
·更大的数据库:这是很多人的重要需求,我们已经非常接近实现了。使用Workers Paid计划的开发人员将在不久的将来获得1 GB数据库的使用权限,我们也将继续提升每个数据库的最大容量。
·运行参数及数据可视性:您将能够通过D1仪表板和我们的GraphQL API检查每个数据库的总体查询量、失败查询、消耗的存储空间以及读/写单位数,从而可以更高效便捷地调试问题和跟踪支出。
·自动读取复制:我们的新存储子系统在构建时就考虑到了复制,并且我们正在努力确保复制层足够快速和可靠,然后才提供给开发人员使用。读取复制不仅旨在通过在接近用户的多个地点存储副本来改善查询延迟,还将允许我们横向扩展具有更大工作负载的D1数据库。
与此同时,您可以立即开始使用D1构建原型和进行试验,探索我们的D1+Drizzle+Remix示例项目,或加入Cloudflare Developers Discord服务器上的#d1频道,与D1团队和其他正在利用D1构建的人进行直接交流。
相关推荐: 在亚马逊A9算法下,如何通过优化搜索引擎来提升产品排名?
我相信做亚马逊的卖家肯定都听过A9算法。它就好像一个神秘的存在,你知道它,也知道它的重要性是可以招揽流量。不管是Google、Bing还是亚马逊,每个搜索引擎都有各自的算法决定搜索的排名而亚马逊一直都因为A9的特殊算法,所以和其他的搜索引擎都不同。 众所周知,…
码刀科技(www.lekshop.cn)是国内知名企业级电商平台提供商,为企业级商家提供最佳的电商平台搭建(多种模式电商平台搭建:B2B/B2B2C/B2C/O2O/新零售/跨境等)、平台管理系统开发及互联网采购解决方案服务, 联系客服了解更多.