首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

微信手机端的本地数据全文检索优化之路

本文以移动平台广泛采用的SQLite FTS Extension为例,介绍了移动平台FTS的基本原理,结合微信Android客户端自身实践,重点讲述微信在FTS上的一些性能优化经验。...:Android和IOS平台本身就支持SQLite,并且FTS Extension的使用就和正常使用SQLite表一样; [4] 兼容性好:受益于SQLite本身兼容性很好,SQLite FTS Extension...在一番研究以后,我发现FTS5支持自定义辅助函数,并且有比较好的API的封装,所以最后使用FTS5自定义辅助函数(MMHighLight)重新实现Offsets函数的功能,并加入优化逻辑。...所以这里关键的实现点在于中间转化函数的实现,微信的中间转化函数MMRank是通过FTS5的辅助函数实现的。 ?...IM实践:实现Android版微信的智能心跳机制》 《移动端IM实践:WhatsApp、Line、微信的心跳策略分析》 《移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)》 《移动端IM

2.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android微信撤回消息如何恢复?「建议收藏」

    今天给大家带来年底最后一篇技术文章,祝大家新的一年在电子数据取证工作上势如破“猪”! 在日常办案过程中,技术人员常会处理有关微信聊天数据的恢复工作。...通过研究发现,撤回消息被存放于微信用户账号文件夹下的FTS5IndexMicroMsg.db-journal文件中。...下面就将具体的Android撤回消息恢复步骤和大家分享,仅供参考!...具体操作步骤 1、事前准备 1)操作手机 一个能够获取数据的Android设备:以OPPO R11 plus(Android版本7.1.1,具有root权限)为例进行讲解; 确保Android设备中的微信存在过撤回消息...△测试数据 2)再次输入adb命令得到FTS5IndexMicroMsg.db-journal文件,然后通过分析,找出开始所录入的模拟数据,如下图所示。

    3.4K20

    SQLite全文搜索引擎:实现原理、应用实践和版本差异

    FTS在SQLite中作为一个虚拟表(Virtual Table)模块实现,支持多种版本,如FTS3、FTS4和FTS5。...一、实现原理 1.1 倒排索引 FTS的核心是倒排索引,它是一种将词汇映射到出现该词汇的文档集合的数据结构。...通过以上算法,可以构建一个倒排索引,实现高效的全文搜索。在实际应用中,还可以对倒排索引进行优化,如压缩倒排列表以减少存储空间需求、为频繁出现的词汇添加倒排列表缓存以提高查找速度等。...在实际应用中,FTS虚拟表的存储结构可能因版本(如FTS3、FTS4和FTS5)和配置选项(如分词器和压缩存储格式)而有所不同。...创建FTS虚拟表的语法与创建普通表类似,但需要使用VIRTUAL TABLE关键字,并指定FTS模块(如FTS3、FTS4或FTS5)。

    81910

    微信团队分享:微信移动端的全文检索多音字问题解决方案

    本文重点讲述微信安卓客户端在SQLite FTS5的基础上,多音字问题的解决方案。...建议:您也可以在微信客户端的sqlite数据库中找到本文中相关技术的真实实现,微信的SQLite样本库可在此下载《微信本地数据库破解版(含iOS、Android),仅供学习研究 [附件下载]》(特别申明...而SQLite FTS5正是通过搜索一个词语来找到对应的DocId,通过TermOffset来定位该词语在Document中的位置。 方案优点: 实现较为简单; 可覆盖所有多音字情况。...》 《QQ音乐团队分享:Android中的图片压缩技术详解(上篇)》 《QQ音乐团队分享:Android中的图片压缩技术详解(下篇)》 《腾讯团队分享:手机QQ中的人脸识别酷炫动画效果实现详解》...版微信如何大幅提升交互性能(二)》 《移动端IM实践:实现Android版微信的智能心跳机制》  《移动端IM实践:WhatsApp、Line、微信的心跳策略分析》  《移动端IM实践:谷歌消息推送服务

    6.3K33

    IM移动端怎么搜索本地聊天记录

    IM软件客户端需要支持本地存储的聊天记录的搜索功能,对于这类非结构化数据(全文数据)一般有两种检索方法。...将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。...(分词是一个很复杂的问题,不在这里细讲。对于移动端的基本检索要求,也可以考虑一元分词,把聊天记录拆成一个一个的字) 索引 创建字典 ? 合并相同词,形成倒排链表 ?...参看《Lucene 3.0 原理与代码分析完整版》 三、具体怎么做 目前大量的移动端(android,ios)都使用sqlite作为数据库,sqlite中支持fts表(full-text search的简称...,有fts3、fts4、fts5三个版本),根据需要选择相应的版本即可实现全文检索功能。

    2.3K40

    音视频技术开发周刊 | 225

    但是播放视频还有一种方式就是使用Android提供的MediaCodec,它可以用于编码和解码。...不仅仅是大量传感器和摄像头,谷歌Starline 3D视频方案解析 近期,谷歌实验室公布了该项目背后的技术细节,包括采用的摄像头、红外传感器等硬件,以及如何在测试过程中,通过精准的视觉模拟来欺骗用户的观感...而且由于所有具有收发功能的记录设备(如个人手机,电脑等)都可以作为记录节点,因此无线声学传感网络的搭建相当容易,它在音频采集和处理领域有着很好的应用前景。...技术实战 —— 快速实现语聊房搭建 语音相比文字图片更丰富,比视频又更简便,是天然的社交工具。...他向我们分享了线上社交以及语聊房的发展、玩法,并详细解析如何快速搭建语聊房,提供稳定、低延时,高品质的线上互动体验。

    70120

    微信全文搜索优化之路

    :使用倒排索引加速查找过程 稳定性好:目前SQLite在移动端的稳定性比较好,FTS Extension就是SQLite的基础上搭建的 接入简单:Android和IOS平台本身就支持SQLite,并且FTS...在一番研究以后,我发现FTS5支持自定义辅助函数,并且有比较好的API的封装,所以最后使用FTS5自定义辅助函数(MMHighLight)重新实现Offsets函数的功能,并加入优化逻辑。...通过以上的分析,减少总体循环次数的核心点就在于,把Java层的排序转移到SQL层去做,优点如下: 减少I/O 减少C层到Java层的数据拷贝 所以这里关键的实现点在于中间转化函数的实现,微信的中间转化函数...MMRank是通过FTS5的辅助函数实现的。...MMRank的实现原理就是通过把所有的排序因子转化到一个64位的Long数值当中,高优先级的排序因子置高位,低优先级的排序因子置低位。

    1.8K20

    微信全文搜索优化之路

    稳定性好:目前SQLite在移动端的稳定性比较好,FTS Extension就是SQLite的基础上搭建的 接入简单:Android和IOS平台本身就支持SQLite,并且FTS Extension的使用就和正常使用...在一番研究以后,我发现FTS5支持自定义辅助函数,并且有比较好的API的封装,所以最后使用FTS5自定义辅助函数(MMHighLight)重新实现Offsets函数的功能,并加入优化逻辑。...通过以上的分析,减少总体循环次数的核心点就在于,把Java层的排序转移到SQL层去做,优点如下: 减少I/O 减少C层到Java层的数据拷贝 所以这里关键的实现点在于中间转化函数的实现,微信的中间转化函数...MMRank是通过FTS5的辅助函数实现的。...MMRank的实现原理就是通过把所有的排序因子转化到一个64位的Long数值当中,高优先级的排序因子置高位,低优先级的排序因子置低位。

    9.3K42

    实时音视频V2版本,如何进行纯音频旁路直播

    简介 实时音视频TRTCSDK适用的业务场景是视频会议、坐席通话、在线教育等,也可以实现类似微信的语音通话、语音会议功能, 官网开发文档已经给出了音视频通话的调用示例,本专栏的《实现类似微信的纯语音通话...实现 把音视频数据流旁推到直播后台,直播后台接收流的依据是以画面数据为准的,纯音频流里面没有画面数据,这就需要额外的信令通道来提醒直播后台:“这条是音频流,麻烦接收一下”。...下面我们就来看,如何通过TRTCSDK的终端接口,实现传信令的功能。...[_trtc enterRoom:self.param appScene:TRTCAppSceneVideoCall]; 注意:传给SDK的json字符串参数注意大小写一致,参数名错误会导致进房失败。...纯音频推流参数完整说明: { "Str_uc_params": { "record_id": 43567, //可选字段,自动录制时业务自定义id,int32,录制回调时给到用户.注意:同一个房间中的成员

    3.5K80

    牛赞:音视频前端跨平台技术应用

    TRTC Flutter SDK架构设计 图中是Flutter SDK架构,SDK基于原生IOS/Android进行封装,能够直接对齐原生SDK,最大程度封用已有能力如音视频采集、编码解码等。...原生SDK存在大量类结构体的类型定义,如进房接口存在TRTC Params定义了应用ID、用户ID、用户密钥等相关信息,由于原有消息通道不支持传递这种类结构体,所以我们对数据通信能力进行了升级。...PlatformView:主要适用于Flutter中不太容易实现的组件,如Webview、视频播放器、地图等,给Flutter提供了嵌入Android和IOS平台原生view的能力。...最终视频渲染的架构如图所示,远端用户进房时,本机通过云服务接收到进房信号,比如很多人在一个房间中,此时有新用户进房,本机需要渲染新用户,首先发送拉流指令,安卓原生SDK一帧帧地回调视频帧纹理数据,再通过...语音沙龙,如年初热度很高的ClubHouse,用户能够加入感兴趣的话题房间,在房间中,由嘉宾发言,房间里的其他听众旁听,听众如果想要发言,可以举手申请成为嘉宾,之后提问或发言。

    2.7K10

    MySQL 的全文索引.

    二、全文索引的实现? 全文索引通常使用倒排索引(inverted index)来实现。倒排索引和 B+ 树索引一样,也是一种数据结构。...这通常利用关联数组来实现,其拥有两种表现形式: inverted file index,其表现形式为 {单词,单词所在文档的 ID} full inverted index,其表现形式为 {单词,(单词所在文档的...参数 innodb_ft_cache_size 用来控制 FTS Index Cache 的大小,默认值为 32M。...;当数据库关闭时,在 FTS Index Cache 中的数据会同步到磁盘上的 Auxiliary Table 中。...: 每张表只能有一个全文检索的索引; 由多个组合而成的全文索引列必须使用相同的字符集和排序规则; 不支持没有单词界定符(delimiter)的语言,如中文、日语、韩语等。

    1.8K20

    Google IO 2019 Android 应用源代码现已发布

    手势导航: 返回上一级界面和主屏 深色主题背景 Android Q 引入的另一项新特性是系统深色主题背景,它既可全局应用于 Android 系统界面,也可应用于设备上运行的应用。...更多内容,请收看 Google I/O 大会上关于深色主题背景与手势导航的专题分享, 或查看 Github 上 Google I/O 应用库中团队所提交的三份代码 (初步实现、风格修复以及更多更新),了解深色主题背景在真实应用中的具体实现方式...移除了向上/返回导航操作的样板代码 使用 Safe Args Gradle 插件在各个 Fragment 之间传递静态类型的参数 请阅读《导航组件入门指南》,学习如何在应用中添加导航组件,或查看 Google...在实现过程中,我们使用了 Room Jectpack 组件中的全文搜索特性。...一旦从服务器获取最新的大会数据,我们就会对 Room 表格内的有关数据进行更新,每个 Room 表格都有对应的 FTS 映射表格。

    1.7K10

    微信技术团队的又一力作,WCDB 简单易用的数据库框架

    接口请参考API reference WCDB for Android 基本功能 基于SQLCipher的数据库加密 使用连接池实现并发读写 内建 Repair Kit 可用于修复损坏数据库 针对占用空间大小优化的数据库备份.../恢复功能 日志输出重定向以及性能跟踪接口 内建用于全文搜索的 mmicu FTS3/4 分词器 入门 接入与迁移 WCDB for Android 可通过 Maven 或 AAR 包引用,API 接口与...Android SDK 非常相近, 所以将已有的 App 迁移到 WCDB 是相当容易的。...编译依赖项 如果你需要自己编译 OpenSSL 等依赖项,你需要一个 Bash 环境(Windows 可以安装 Cygwin 或 MSys)、target 为本机的 C 编译器(如 GCC)、Perl...export ANDROID_NDK_ROOT='/path/to/ndk'./build-depends-android.sh 编译依赖项不是必要的,你完全可以使用预先编译好的库。

    1.8K70

    Ubuntu 16.04如何使用PostgreSQL中的全文搜索

    介绍 全文搜索(FTS)是搜索引擎用于在数据库中查找结果的技术。它可用于为商店,搜索引擎,报纸等网站上的搜索结果提供支持。...更具体地说,FTS检索文档,这些文档是包含文本数据的数据库实体,与搜索标准不完全匹配。...LIKE在这里使用运算符而不是FTS会产生空结果。 现在我们知道如何为FTS准备文档以及如何构建查询,让我们来看看如何提高FTS的性能。...第三步 - 提高FTS性能 每次使用FTS查询时生成文档在使用大型数据集或较小的服务器时都会成为性能问题。我们将在此实现的一个很好的解决方案是在插入行时生成转换后的文档,并将其与其他数据一起存储。...结论 本教程介绍了如何在PostgreSQL中使用全文搜索,包括准备和存储元数据文档以及使用索引来提高性能。

    2.7K60

    【开源公告】WCDB(WeChat Database)于6月9日正式对外开源

    WCDB(WeChat Database)项目简介 WCDB是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android。...WCDB for iOS/macOS 基本功能 WINQ(WCDB语言集成查询): 通过WINQ,开发者无须为了拼接SQL的字符串而写一大坨胶水代码。...加密:WCDB提供基于SQLCipher的数据库加密。 损坏修复: WCDB内建了Repair Kit用于修复损坏的数据库。 反注入: WCDB内建了对SQL注入的保护。...---- WCDB for Android 基本功能 基于SQLCipher的数据库加密 使用连接池实现并发读写 内建 Repair Kit 可用于修复损坏数据库 针对占用空间大小优化的数据库备份/恢复功能...日志输出重定向以及性能跟踪接口 内建用于全文搜索的 mmicu FTS3/4 分词器 WCDB(WeChat Database)于6月9日在GMTC全球移动技术大会上正式对外开源 官方开源地址: https

    1.4K50

    MySQL模糊查询再也用不着 like+% 了!

    倒排索引 全文检索通常使用倒排索引(inverted index)来实现,倒排索引同 B+Tree 一样,也是一种索引结构。...它在辅助表中存储了单词与单词自身在一个或多个文档中所在位置之间的映射,这通常利用关联数组实现,拥有两种表现形式: inverted file index:{单词,单词所在文档的id} full inverted...,Position),因此其存储的倒排索引如下图,如关键字"code"存在于文档1的第6个单词和文档4的第8个单词。...distance 之内,distance 的单位是字节,这种全文检索的查询也称为 Proximity Search,如 MATCH(context) AGAINST('"Pease hot"@30'...:表示以该单词开头的单词,如 lik*,表示可以是 lik,like,likes " :表示短语 下面是一些demo,看看 Boolean Mode 是如何使用的。

    1.3K30

    什么是WebRTC?

    得力与Google将其开源(当然也有Google自己的市场战略意义),如今WebRTC已经不仅仅局限于PC的网页浏览器,Android,iOS平台上很多应用都已经采用了这样技术 虽然其名为WebRTC,...但是实际上它不光支持Web之间的音视频通讯,还支持Android以及IOS端,此外由于该项目是开源的,我们也可以通过编译C++代码,从而达到全平台的互通。...所谓房间(Room),就是把同时参与视频通话的各方圈在一起的一个东西。比如双人通话中,通话中的两个人 A 和 B 就可以认为在一个房间中。...有了房间的概念,那我们就可以对刚才说的状态协同用两个简单的动作描述一下:如果有一个人加入了视频通话,那么就可以理解为他/她已经进房(EnterRoom)了;如果有一个退出了视频通话,那么就可以理解为他/...发生错误时用来相互通告的消息 3. 元数据,如各自的音视频解码方式、带宽。 4. 网络数据,对方的公网IP、端口、内网IP及端口。

    88150

    MySQL 模糊查询再也不用like+%了

    来实现,倒排索引同 B+Tree 一样,也是一种索引结构。...这通常利用关联数组实现,拥有两种表现形式: inverted file index:{单词,单词所在文档的id} full inverted index:{单词,(单词所在文档的id,再具体文档中的位置...而 full inverted index 存储的是对,即(DocumentId,Position),因此其存储的倒排索引如下图,如关键字"code"存在于文档 1 的第 6 个单词和文档 4 的第 8...distance 之内,distance 的单位是字节,这种全文检索的查询也称为 Proximity Search,如 MATCH(context) AGAINST('"Pease hot"@30'...* :表示以该单词开头的单词,如 lik*,表示可以是 lik,like,likes " :表示短语 下面是一些 demo,看看 Boolean Mode 是如何使用的。

    26610

    “八成用户在使用”,对于VR看房的兴起究竟该怎么看?

    贝壳负责人讲解VR看房 贝壳推行的VR看房,从营销结果上看,可以说是大有成效。在成都,贝壳VR看房已实现近3万套房源VR化,已有80%用户开始使用VR看房。...这也成为了业内人士质疑的最多的地方。 ? 那么,两者的技术究竟有何差别?简单来说,VR看房需要借助VR眼镜,然后“进入”到房间中去,可以在房间中自由走动,与房间内的物品进行交互。...如小编在上文所提到的贝壳,其就是借助3D实景技术,来真实准确地还原现实场景。贝壳利用了具有深度视觉功能的专业相机,以此来采集空间的深度数据和图片数据。...“360度看房”给用户带来的便利是不言而喻的。用户仅需手机就可以实现在家看房,轻触屏幕任意处即可获得包括房屋真实空间的尺寸、朝向、远近等深度信息,还能了解到房子周围的教育、医疗等配套信息。...目前,北京、上海等一线城市的售楼处,“360度看房(VR+房产)”的新型营销模式已经相当普遍,这种流行也正悄悄迈入杭州(如美房云客)。

    47700
    领券