Flutter NoSql数据库Sembast初探

Sembast是DartVM和Flutter的NoSql数据库,提供加密支持,基于文档存储,易于扩展。本文介绍了Sembast的特性,如单文件存储、全平台支持和Web扩展,并展示了如何在Flutter中初始化、升级和操作数据库。
摘要由CSDN通过智能技术生成

什么是Sembast?

Sembast是可用于DartVM和Fluutter的NoSql数据库。Sembast是基于文档的数据库,并且支持加密。

对于NoSql数据库的使用者来说,最大的吸引力莫过于易扩展了。相对于关系型数据库,开发者不必疲于维护数据字段或者表结构升级等繁琐的工作。尤其对于Flutter来说,作为一个客户端技术热更新技术是一直被使用者诟病的方面,所以发版前保证更新后的应用能正常使用是一个非常关键的工作,这对开发和测试团队带来了不小的挑战。比如我们常用的SqlLite数据库,一旦客户端升级过后,数据库升级带来不可逆的错误,可能导致用户必须卸载重装才能修复,这导致涉及数据库开发的功能测试一定会慎之又慎。

今天这篇文章是对NoSql数据库Sembast的使用做一个初步的探索。

Sembast特性

Yet another NoSQL persistent store database solution for single process io applications. The whole document based database resides in a single file and is loaded in memory when opened. Changes are appended right away to the file and the file is automatically compacted when needed.

Works on Dart VM and Flutter (no plugin needed, 100% Dart so works on all platforms - MacOS/Android/iOS/Linux/Windows). Inspired from IndexedDB, DataStore, WebSql, NeDB, Lawndart...

Supports encryption u

1.什么是外存Exist 外存本质上是一个内存级别的nosql。 它提出了“面向变量”的数据访问思想,让用户只见变量,不见接口,省去了繁琐的接口调用。以此实现了逻辑与数据分离的效果,一份单结点代码自动达到分布式效果。目前提供了int8、uint8、uint64、float、double等基础类型变量的操作,后续将实现map vector类型变量操作。2.应用场景对比来看看面向变量的接口方式比传统数据接口方式要方便多少场景1:假设服务上有3个逻辑:用户登录时,用户发表文章,用户发表评论时,要提升用户等级 。传统数据库接口方式 申明数据库连接 db; db.connect(); OnLogin() {     申明变量 level     get(表名,"level", level);     level ;     set(表名,"level", level); } OnSend() {     申明变量 level     get(表名,"level", level);     level     set(表名,"level", level); } OnReply() {     申明变量 level     get(表名,"level", level);     level     set(表名,"level", level); } 面向变量的访问方式 Exist::int32 m_var("level");//申明变量 OnLogin() {     var ;//数据已经在外存服务器上修改,下次访问将在新值基础上 } OnSend() {     var ;//数据已经在外存服务器上修改,下次访问将在新值基础上 } OnReply() {     var ;//数据已经在外存服务器上修改,下次访问将在新值基础上 }就这么简单,用户直接看到一个个的变量,就像操作内存上的变量一样操作数据,根本不需要任何接口,外存由此得名场景2:100万用户同时在线:用户A要查询用户B的资料传统接口方式m_otherNode;//其它结点/中转定位服务 std::map<...> m_userList;//已经登录当前结点的用户的列表 OnFindUser( char *username ) {         map::iterater it = m_userList.find(username);         if ( it == m_userList.end() )//用户未必再当前结点登录,         {                 m_otherNode.Send("查询用户数据");//到其它结点,或其它定位服务中专查询                 m_otherNode.Recv();                 if (回应用户不存在)                  {                         回应用户不存在;                         return;                 }         }         回应用户信息         return; };面向变量接口方式Exist::map<...> m_userList;//已经登录的用户的列表,用户信息在外存上 OnFindUser( char *username ) {         map::iterater it = m_userList.find(username);         if ( it == m_userList.end() )//用户要么在外存中,要么不存在         {                 回应,用户不存在;                 return;         }         回应用户信息;         return; };省去了到其它结点查询的代码,省去了记录相关服务的连接对象,一套代码同时满足单结点与分布式需求,从此没有分布式一说map与vector尚未实现,将在后续版本中实现,请期待支持平台:win linux性能:单个client测试,win 5000~6000tps,linux 最高达到3.7万tps支持编译:VC 6.0和VS2010,VS2010以下用户可以从 VC6.0工程转换,linux直接make欢迎各路朋友一起体验尝鲜 标签:外存  NoSQL数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sackcent

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值