开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 25729|回复: 256
收起左侧

[易源码分享] TX开源库 - MMKV 易语言封装调用

    [复制链接]
结帖率:88% (7/8)
发表于 2021-1-17 21:31:30 | 显示全部楼层 |阅读模式   重庆市重庆市
分享源码
界面截图:
是否带模块: 调用了模块
备注说明: -
本帖最后由 波哥野结衣 于 2021-1-17 21:49 编辑

MMKV——腾讯开源库 基于 mmap 的高性能通用 key-value 组件

MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证。近期也已移植到 Android / macOS / Win32 / POSIX 平台,一并开源。

MMKV 源起

在微信客户端的日常运营中,时不时就会爆发特殊文字引起系统的 crash,参考文章,文章里面设计的技术方案是在关键代码前后进行计数器的加减,通过检查计数器的异常,来发现引起闪退的异常文字。在会话列表、会话界面等有大量 cell 的地方,希望新加的计时器不会影响滑动性能;另外这些计数器还要永久存储下来——因为闪退随时可能发生。这就需要一个性能非常高的通用 key-value 存储组件,我们考察了 SharedPreferences、NSUserDefaults、SQLite 等常见组件,发现都没能满足如此苛刻的性能要求。考虑到这个防 crash 方案最主要的诉求还是实时写入,而 mmap 内存映射文件刚好满足这种需求,我们尝试通过它来实现一套 key-value 组件。

MMKV 原理

内存准备
通过 mmap 内存映射文件,提供一段可供随时写入的内存块,App 只管往里面写数据,由操作系统负责将内存回写到文件,不必担心 crash 导致数据丢失。

  • 数据组织
    数据序列化方面我们选用 protobuf 协议,pb 在性能和空间占用上都有不错的表现。
  • 写入优化
    考虑到主要使用场景是频繁地进行写入更新,我们需要有增量更新的能力。我们考虑将增量 kv 对象序列化后,append 到内存末尾。
  • 空间增长
    使用 append 实现增量更新带来了一个新的问题,就是不断 append 的话,文件大小会增长得不可控。我们需要在性能和空间上做个折中。

更详细的设计原理参考 MMKV 原理

快速上手

MMKV 的使用非常简单,所有变更立马生效,无需调用 savesync
在 App 启动时初始化 MMKV,设定 MMKV 的根目录,例如在 main() 里:

C++
#include

int main() {
std::wstring rootDir = getYourAppDocumentDir();
MMKV::initializeMMKV(rootDir);
// MMKV 提供一个全局的实例,可以直接使用:
auto mmkv = MMKV::defaultMMKV();
mmkv->set(true, "bool");
std::cout << "bool = " << mmkv->getBool("bool") << std::endl;

`mmkv->set(1024, "int32");`
`std::cout << "int32 = " << mmkv->getInt32("int32") << std::endl;`

`mmkv->set("Hello, MMKV for Win32", "string");`
`std::string result;`
`mmkv->getString("string", result);`
`std::cout << "string = " << result << std::endl;`

}

MMKV 支持多进程访问,更详细的用法参考 Win32 Tutorial

问题 & 反馈

常见问题参见 FAQ,欢迎提 issues 提问反馈。

上面是腾讯关于MMKV的介绍,直接复制过来了。更多详情和用例请看GITHUB开源地址。
因为MMKV并不复杂,所以顺手就封装了一份给易语言调用,带了一个简单的使用方法。
封装的是最新的正式版 v1.2.7。



TX开源库MMKV - 易调用.zip (125.76 KB, 下载次数: 560)

点评

楼下那货脑子不正常,都说是开源项目,MMKV,TX开源的。GITHUB有源代码   贵州省遵义市  发表于 2021-1-20 22:50
别人标题那么大的字,封装调用,你非要杠别人不是开源,你开个源我看看   甘肃省陇南市  发表于 2021-1-18 23:45
mmkv是C++项目,我只能编译成DLL给E调用,模块仅声明了导出函数,觉得不好,可以自己反编译,如果你要源码,请自己使用mmkv源代码   重庆市重庆市  发表于 2021-1-18 16:44
现在人的开源和我理解的开源都不一样了吗?一个DLL.一个EC,再加一个调用的DEMO。就能叫 开源了?   广东省佛山市  发表于 2021-1-18 15:36

评分

参与人数 17好评 +15 精币 +47 收起 理由
admmx + 1 支持开源~!感谢分享
阿顺 + 1 + 1 支持开源~!感谢分享
易语言资源网 + 1 + 3 奉上小小红包希望笑纳~
ASSHOLE + 1 + 2 新技能已get√
二毛2021 + 1 + 2 易语言没有键值对一直是很可惜的
粉风 + 1 + 2 支持开源~!感谢分享
司徒西 + 1 + 2 支持开源~!感谢分享
金胖子 + 1 + 2 感谢发布原创作品,精易因你更精彩!
7ian + 1 进我的收藏夹吃灰吧
shituo + 2 为什么不弄中文?
梦寻简单 + 1 + 3 感谢分享,很给力!~
红妆V + 1 + 1 新技能已get√
1301ok + 1 感谢分享,很给力!~
BlackMamba + 1 + 1 新技能已get√
流星暴雨 + 1 + 3 支持开源~!感谢分享
冰点 + 1 + 20 感谢分享,很给力!~
商亨人和 + 1 + 2 支持开源~!感谢分享

查看全部评分


本帖被以下淘专辑推荐:

签到天数: 3 天

发表于 2024-2-15 01:12:43 | 显示全部楼层   河北省石家庄市
qq805123809                 
回复 支持 反对

使用道具 举报

签到天数: 14 天

发表于 2024-1-31 15:28:26 | 显示全部楼层   辽宁省大连市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:83% (5/6)

签到天数: 1 天

发表于 2024-1-23 09:10:25 | 显示全部楼层   河北省石家庄市
学习一下
回复 支持 反对

使用道具 举报

结帖率:92% (12/13)
发表于 2024-1-21 22:27:57 | 显示全部楼层   江苏省苏州市
        感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 20 天

发表于 2024-1-15 18:11:30 | 显示全部楼层   河北省邯郸市
666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2024-1-12 10:00:23 | 显示全部楼层   辽宁省沈阳市
看上去不错
回复 支持 反对

使用道具 举报

结帖率:38% (6/16)

签到天数: 15 天

发表于 2024-1-3 01:09:14 | 显示全部楼层   贵州省安顺市
解压密码呢
回复 支持 反对

使用道具 举报

结帖率:25% (1/4)

签到天数: 15 天

发表于 2024-1-1 17:18:33 | 显示全部楼层   四川省泸州市
易语言 MMKV 模块
回复 支持 反对

使用道具 举报

结帖率:75% (6/8)

签到天数: 5 天

发表于 2023-12-30 19:23:47 | 显示全部楼层   河北省廊坊市
805123809805123809
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表