Ĭ��
���� �������� 6
�뿪��IM������Ʒ�¿ӣ�����3���¹����ҿ�Դ����ߣ������������·��... ��վ�����㽨��
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��
΢��ɨһɨ��ע��

������΢�ſ����Ŷӹ���ʦ�� qiuwenchen��������ԭ�⡰iOS΢��ȫ�����������Ż�������ʱͨѶ�����޶���


1������


ȫ�ļ�����ʹ�õ�����������������һ��������ʽ����������Ҳ��Ϊ������������ָ�������������е�ÿ��Token����һ�������������б���������Token�������еľ���λ�á�ȫ�ļ���������ҪӦ���ڶԴ����ı����ݽ��������ij�����

΢���ն��漰�������ı�������ҵ�񳡾���Ҫ������im��ϵ�ˡ�im������¼���ղص�������

��Щ���ܴ�2014���������񣬵ײ㼼���Ѷ���û�и��£�

  • 1��������¼ʹ�õ�ȫ�ļ������滹��SQLite FTS3���������Ѿ���SQLite FTS5��
  • 2���ղ���ҳ����������ʹ�ü򵥵�Like����ȥƥ���ı���
  • 3����ϵ�����������õ����ڴ����������ڴ��б���������ϵ�˵��������Խ���ƥ�䣩��

�����û���΢���ϻ��۵�im��������Խ��Խ�࣬����΢�ŵײ���������������ҲԽ��Խ���С����ǣ���2021�����Ƕ�΢��iOS�˵�ȫ�ļ�������������һ��ȫ��������������Ҫ��¼�˱��μ������������еļ���ʵ����

IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_cover-opti.png

2��ϵ������


������ר��ϵ�������еĵ�4ƪ��


3��ȫ�ļ���������ѡ��


iOS�ͻ��˿���ʹ�õ�ȫ�ļ������沢���࣬��Ҫ�У�

  • 1��SQLite�����汾��FTS������FTS3��4��FTS5����
  • 2��Lucene��C++ʵ�ְ汾CLucene��
  • 3�� Lucene��C�����ŽӰ汾Lucy��

������������Щ�����������������������ա�������������д���ܵȷ����ıȽϣ�����ͼ����

IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_1-1.png

1���������������棺

Luceneû���ṩ������������������ΪLuceneʹ���˶��ļ��Ĵ洢�ṹ����û�б�֤������ԭ���ԡ�

��SQLite��FTS������Ϊ�ײ㻹��ʹ����ͨ�ı���ʵ�ֵģ����������̳�SQLite������������

2���ڼ������շ��棺

Lucene��ҪӦ���ڷ����ˣ��ڿͻ���û�д���ģӦ�õİ���������CLucene��Lucy��2013�����ٷ���ֹͣά���ˣ��������սϸߡ�

SQLite��FTS3��FTS4������������SQLite�ľɰ汾���棬�ٷ�ά�������ˣ������������汾���ǽ�һ���ʵ������浽һ����¼�У������������г���SQLite������¼���󳤶����Ƶķ��ա�

SQLite��FTS5������Ϊ���°汾����Ҳ�Ѿ��Ƴ����������ˣ��ڰ�׿΢����Ҳ�Ѿ�ȫ��Ӧ�ã����Լ������������͵ġ�

3���������������棺��

Lucene�ķ�չ��ʷ��SQLite��FTS�������ܶ࣬������������Ҳ�����ḻ�ġ��ر���Lucene�зḻ���������������������ƣ���������΢�ſͻ���û��Ӧ�ó�������Ϊ���ǵ���������Ҫô�ǰ���ʱ��������Ҫô�ǰ���һЩ�򵥵��Զ�������������

��SQLite�����汾�������У�FTS5�������﷨�����걸�Ͻ����ṩ�˺ܶ��ӿڸ��û��Զ�������������������������Ҳ����ǿһ�㡣

4���ڶ�д���ܷ��棺

����3��ͼ���ò�ͬ������100��������Ϊ10����������������������Optimize״̬���������������ݣ�����ÿ�������ĺ��ֳ���Ƶ�ʰ���ʵ�ʵĺ���ʹ��Ƶ�ʡ�

IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_1-2.png

IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_1-3.png

IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_1-4.png

��������3��ͼ���Կ�����Lucene��ȡ�������������ܱ�SQLite�úܶ࣬˵��Lucene�������ļ���ʽ�������ƣ�����΢��û��ֻ��ȡ����������Ӧ�ó�����Lucene�������������ݸ�SQLite�IJ��಻���ԡ�SQLite FTS3��FTS5�Ĵ󲿷����ܺܽӽ���FTS5���������ɺ�ʱ��FTS3��һ�أ��������Ż�������

�ۺϿ�����Щ���أ�����ѡ��SQLite FTS5��ΪiOS΢��ȫ�ļ���������������

4���������Ż�1��ʵ��FTS5��Segment�Զ�Merge����


SQLite FTS5����ÿ������д�������ݱ�����һ��������b������Ϊһ��segment��segment�б����˱���д�������е�ÿ�����ڱ����������кţ�rowid�����кź��ֶ��е�ÿ�γ��ֵ�λ��ƫ�ƣ���������segment���Ǹ����ݵĵ���������

����д���ͻ��γɶ���segment����ѯʱ����Ҫ�ֱ���ѯ��Щsegment�ٻ��ܽ������Ӷ�segment����Խ�࣬��ѯ�ٶ�Խ����

Ϊ�˼���segment��������SQLite FTS5������merge���ơ���д����segment��levelΪ0��merge�������԰�levelΪi������segment�ϲ���һ��levelΪi+1���µ�segment��

merge��ʾ�����£�
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_1-5.png

FTS5Ĭ�ϵ�merge���������֣�

  • 1��automerge��ijһ��level��segment�ﵽ4ʱ�Ϳ�ʼ��д������ʱ�Զ�ִ��һ����merge��������Ϊһ��automerge��ÿ��automerge��д���������θ��µ�д���������ȣ���Ҫ����automerge���������ϲ���һ����segment��Automerge����������һ���µ�segmentǰ����Ҫ���βü��ɵ�segment���Ѻϲ����ݣ�����������д������
  • 2��crisismerge������д����ijһ��level��segment�����ﵽ16ʱ��һ���Ժϲ�����level��segment����Ϊcrisismerge��

FTS5��Ĭ��merge����������д��ʱͬ��ִ�еģ�����ҵ���߼���������Ӱ�죬�ر���crisismerge��żȻ����ijһ��д�������ر��ã�������ҵ�����ܲ��ɿأ�֮ǰ�IJ�����FTS5�Ľ�������ʱ�Ͼã�Ҳ��Ҫ��ΪFTS5��merge���������������������Ӻ�ʱ����

������WCDB��ʵ��FTS5��segment�Զ�merge���ƣ�����Щmerge�������е�һ���������߳�ִ�У������Ż�ִ�в�����

�����������£�

  • 1��������FTS5���������ݿ�ÿ��������������FTS5����������֪ͨ�����̴߳���WCDB���Զ�merge������
  • 2��Merge�̼߳�������FTS5��������segment������ 1 ��levelִ��һ��merge��
  • 3��Mergeʱÿд��16ҳ���ݼ���һ����û�������̵߳�д��������Ϊmerge���������������о�����commit��������Сmerge��ҵ�����ܵ�Ӱ�졣

�Զ�merge�߼�ִ�е�����ͼ���£�
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_1-6.png

����ÿ��level��segment����Ϊ1��������FTS5�IJ�ѯ�������ӽ�optimize������segment�ϲ���һ����֮�������ܣ�����������д�����ǿɽ��ܵġ�����ҵ��ÿ��д����ΪM��д����N�Σ���ô��mergeִ������֮�������ݿ�ʵ��д����ΪMN(log2(N)+1)��ҵ������д�룬����MҲ���Լ�С��д������

���ܷ��棬��һ������100w���������ݣ�ÿ������100���ֵ�fts5�ı���ѯ�����ʣ�optimize״̬�º�ʱ2.9ms���ֱ�����ÿ��level��segment����Ϊ2��3��4ʱ�IJ�ѯ��ʱ�ֱ�Ϊ4.7ms��8.9ms��15ms��100w������ÿ��д��100���������£�����WCDB�ķ���ִ��merge�ĺ�ʱ��10s�ڡ�

ʹ���Զ�Merge���ƣ������ڲ�Ӱ�������������ܵ������£���FTS5�������������ӽ�Optimize��״̬�������������ٶ���

5���������Ż�2���ִ����Ż�


5.1�ִ��������Ż�


�ִ�����ȫ�ļ����Ĺؼ�ģ�飬��ʵ�ֽ��������ݲ��ֳɶ���Token���ṩ��ЩToken��λ�ã����������ٶ���ЩToken����������SQLite��FTS����֧���Զ����ִ��������԰���ҵ������ʵ���Լ��ķִ�����

�ִ����ķִʷ������Է�Ϊ���ִַʺͰ��ʷִʡ�ǰ��ֻ�Ǽ򵥶������������ֽ�����������������Ҫ�����������ݵ����壬���о��庬���Ĵ��齨�������������ڰ��ִַʣ����ʷִʵ������Ǽȿ��Լ��ٽ�������Token������Ҳ���Լ�������ʱƥ����Token��������������Ҫ�������壬�����û������Ĵʲ�����ʱҲ�����Ѳ��������⡣

Ϊ�˼򻯿ͻ����߼��ͱ����û�©������ʱ�Ѳ��������⣬iOS΢��֮ǰ��FTS3�ִ���OneOrBinaryTokenizer�Dz�����һ�������İ��ִַ��㷨�����˶������������ֽ�������������������ÿ�����������ֽ����������������������ǰ���ÿ�����ֽ��зִʡ�

�������á�������ӭ�㡱ȥ������ͬ���ݵķִ����ӣ�
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_1-7.png

�����ڼ򵥵İ��ִַʣ����ִַʷ�ʽ�������ǿ��Խ�����ʱƥ����Token�����ӽ�����һ�룬���������ٶȣ�������һ���̶��Ͽ��������������ȣ�������������ӭ�㱱������ƥ�䲻����������ӭ�㡱�������ִַʷ�ʽ�����ƾ��DZ������������ݺܶ࣬�����������ݵ�ÿ���ֶ��������б��������Σ���һ���ÿռ任ʱ����������

��ΪOneOrBinaryTokenizer�ýӽ��������������������Ż�ȡ���������������������������Ǻܻ��㣬����������FTS5�����¿�����һ���µķִ���VerbatimTokenizer�������ִ���ֻ���û����İ��ִַʣ������������������ݡ�ͬʱ������ʱ��ÿ����������������������һ��Phrase������FTS5�������﷨������ʱPhrase�е���Ҫ��˳�����ڳ��ֵ����ݲŻ����У�ʵ���˸�OneOrBinaryTokenizerһ�����������ȡ�

VerbatimTokenizer�ķִʹ���ʾ��ͼ���£�
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_1-8.png

5.2�ִ���������չ


VerbatimTokenizer������΢��ʵ�ʵ�ҵ������ʵ����������չ�����������������ݴ�������

1��֧���ڷִ�ʱ��������ת���ɼ������������û������÷������ѵ����������ݣ��ü�����Ҳ���ѵ����������ݣ���������Ϊ���ֵļ����ͷ����������������û����������⡣

2��֧��Unicode��һ����Unicode֧����ͬ���ε��ַ��ò�ͬ�ı�������ʾ����������Ϊ\ue9�Ĩ��ͱ���Ϊ\u65\u301��é����ͬ�����Σ����ᵼ���û��ÿ���ȥһ��������ȥ���������Ѳ��������⡣Unicode��һ�����ǰ�������ͬ���ַ���ͬһ��������ʾ��

3��֧�ֹ��˷������󲿷������£����Dz���Ҫ֧�ֶԷ��Ž����������ŵ��ظ����������û�һ��Ҳ�����÷���ȥ�������ݣ�������ϵ����������ҵ�񳡾���Ҫ֧�ַ�����������Ϊ�û����dz����澭�����������֣����ŵ�ʹ�������͡�

4��֧����Porter Stemming�㷨��Ӣ�ĵ���ȡ�ʸ���ȡ�ʸɵĺô��������û��������ݵĵ�������ʱ̬���������ݲ�һ�£����û��������ѵ����ݡ�����ȡ�ʸ�Ҳ�б׶ˣ������û�Ҫ�����������ǡ�happyday�������롰happy����Ϊǰ׺ȥ����ȴ���Ѳ�������Ϊ��happyday��ȡ�ʸɱ��ɡ�happydai������happy��ȡ�ʸɱ��ɡ�happi�������߾Ͳ��ܳ�Ϊǰ�ߵ�ǰ׺������badcase������Ϊ����Ӣ�ĵ���ƴ��һ��ʱ���׳��֣���ϵ���dzƵ�ƴ��Ӣ�ĺܳ�������������ϵ�˵�������û��ȡ�ʸɣ�������ҵ�񳡾��ж������ˡ�

5��֧�ֽ���ĸȫ��ת��Сд�������û�������Сд�ѵ���д����֮��Ȼ��

��Щ��չ�������ǶԽ��������ݺ����������е�ÿ�������任�������任��ʵҲ������ҵ�����������е�Unicode��һ���ͼ���ת����ǰ������ҵ����ʵ�ֵġ�

�����������������׶ˣ�

  • 1��һ����ҵ����ÿ��һ��ת������Ҫ��������һ�α���������������������
  • 2��һ����д�뵽�����е�������ת���������ݣ���ô���������Ľ���Ҳ��ת�����ģ�����ԭ�IJ�һ�£�ҵ�����������жϵ�ʱ�����׳�����

����������ԭ����VerbatimTokenizer����Щת�����������е��˷ִ�����ʵ�֡�

6���������Ż�3����������֧�ֶ༶�ָ���


SQLite��FTS��������֧���ڽ��������������У���������ҵ���ķ�չ��ҵ������֧�����������Ի����࣬���ν��������Ե����������أ�

�ر�������ϵ����������ҵ�񳡾���һ����ϵ��֧���������ֶηdz��ࡣ

һ��ֱ�ӵ��뷨�ǣ��������Ժ;������÷ָ���ƴ�ӵ�һ����������

�������������µ����⣺FTS5���������ֶε�������Ϊ����ȥƥ���ģ������û�����ƥ����Token�ڲ�ͬ�����ԣ�����������Ҳ�����У�����������Ȼ�����û���Ҫ�ģ����������ľ�ȷ�Ⱦͽ����ˡ�

������Ҫ����ƥ����Token�м䲻���ڷָ���������������ȷ��ƥ����Token����һ�������ڡ�ͬʱ��Ϊ��֧��ҵ��������չ������Ҫ֧�ֶ༶�ָ������������������л�Ҫ֧�ֻ�ȡƥ�������IJ㼶��λ���Լ��ö����ݵ�ԭ�ĺ�ƥ���ʡ�

��������FTS5��û�У���FTS5���Զ��帨������֧��������ʱ��ȡ���������н�����ÿ������Token��λ�ã�����������Ϣ�����ƶϳ���ЩToken�м���û�зָ������Լ���ЩToken���ڵIJ㼶���������ǿ�����SubstringMatchInfo�����µ�FTS5��������������ʵ������������

���������Ĵ���ִ���������£�
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_1-9.png

7��Ӧ�ò��Ż�1�����ݿ�����ʽ�Ż�


7.1���ı��������ݵı��淽ʽ


��ʵ��Ӧ���У����dz���Ҫ�����ݿ��б�����Ҫ�������ı���FTS����������Ҫ���Ᵽ�������ı���Ӧ��ҵ�����ݵ�id�����ڽ��������ĵ����ԣ���������ҵ�����ݵĴ���ʱ�����Լ�������Ҫֱ�Ӹ��������������������ݣ���Щ���Dz������ı����������ݡ�

���ݷ��ı��������ݵIJ�ͬ�洢λ�ã����ǿ��Խ�FTS�������ı���ʽ�ֳ����֣�

1����һ�ַ�ʽ���ǽ����ı��������ݴ洢�ڶ�������ͨ���У�����������FTS������Rowid�ͷ��ı��������ݵ�ӳ����ϵ����FTS��������ÿһ��ֻ�������������ı����ݡ�

��������ʽ������������
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-1.png

���ֱ���ʽ�����ƺ������Ǻ����ԣ��ֱ��ǣ�

  • a�������ǣ�FTS�����������ݺܼ򵥣�����ϤFTS���������õ�ͬѧ�����׳�����������ͨ���Ŀ���չ�Ժã�֧���������У�
  • b�������ǣ�����ʱ��Ҫ����FTS������Rowid��ȡ����ͨ����Rowid���������ܶ�ȡ����ͨ�����������ݣ������ٶ���һ�㣬��������ʱ��Ҫ������ѯ������SQL������΢����һ�㡣

2���ڶ��ַ�ʽ���ǽ����ı���������ֱ�ӺͿ������ı�����һ���洢��FTS�������С�

����ʽ������������
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-2.png

���ַ�ʽ�������Ƹ�ǰһ�ַ�ʽǡ���෴��

  • a�������ǣ������ٶȿ�����������ʽ�򵥣�
  • b�������ǣ���չ�Բ�����Ҫ��ϸ�µ����á�

��ΪiOS΢����ǰ��ʹ�õڶ��ֱ���ʽ������΢�ŵ�����ҵ���Ѿ��ȶ������д��仯���������ڸ���׷�������ٶȣ��������ǻ��Ǽ���ʹ�õڶ��ֱ���ʽ���洢ȫ�ļ�����������

7.2����������������


FTS������Ĭ�϶Ա��е�ÿһ�е����ݶ���������������������������Ҳ�ᰴ���ı��������������ᵼ�����DZ�����FTS�������еķ��ı���������Ҳ�����������������������ļ��Ĵ�С���������µĺ�ʱ�������ĺ�ʱ������Ȼ����������Ҫ�ġ�

FTS5֧�ָ��������е�������UNINDEXEDԼ��������FTS5�Ͳ����������н������ˣ����Ը��������ı�����֮������������������Լ���Ϳ��Ա�������������

7.3�����������ݵĴ�С


ǰ���ᵽ������������Ҫ�����ı���ÿ��Token��Ӧ���кţ�rowid�����кź��ֶ��е�ÿ�γ��ֵ�λ��ƫ�ƣ����е��к���SQLite�Զ������ģ�λ��ƫ���Ǹ���ҵ����ʵ�����ݣ����������Ƕ��������ˣ������к��ǿ��Ե����ġ�

��FTS5�����У�һ��Token��һ���е��������ݵĸ�ʽ�������ģ�
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-3.png

���п��Կ������������ǰѿ������ı����������ڵ�һ�еĻ��������������ı��еĻ��������ݶ����зŵ���һ�������Ϳ����ٱ����зָ���0x01���кţ������������Խ��������ļ���С��

�����������յı���ʽ��������
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-4.png

7.4�Ż�ǰ����Ч���Ա�


������iOS΢���Ż�ǰ����ƽ��ÿ���û��������ļ���С�Աȣ�
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-5.png

8��Ӧ�ò��Ż�2�����������߼��Ż�


8.1����


Ϊ�˽�ȫ�ļ����߼���ҵ���߼����iOS΢�ŵ�FTS�����Dz������ڸ���ҵ�������ݿ��еģ����Ǽ��б��浽һ��ר�õ�ȫ�ļ������ݿ⣬����ҵ���������и���֮�����첽֪ͨȫ�ļ���ģ������������

�����������£�
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-6.png

�������ȿ��Ա���������������ҵ�����ݸ��µ��ٶȣ�Ҳ�ܱ����������ݸ��³����������������𻵶�ҵ������Ӱ�죬��ȫ�ļ�������ģ���ܹ����ֶ�����

8.2��֤���������ݵ�һ��


ҵ�����ݺ��������ݷ������첽ͬ���ĺô��ܶ࣬��ʵ������Ҳ���ѡ�

���ѵ����������α�֤ҵ�����ݺ��������ݵ�һ�£�Ҳ��Ҫ��֤ҵ�����ݺ���������Ҫ������Ӧ�����಻�١�

����iOS΢�����������˺ܶ��ӣ����˺ܶಹ�����������������������⣬������Ҫһ��������ϵ���ķ����������������⡣

Ϊ�˼������⣬���ǿ��԰�һ�����������Բ������������ֱ�������

  • 1��һ�DZ�֤����ҵ�����ݶ��������������û������������Ͳ�����ȱ©��
  • 2�����DZ�֤������������Ӧһ����Ч��ҵ�����ݣ������û��Ͳ����ѵ���Ч�Ľ�����

Ҫ��֤����ҵ�����ݶ�������������Ҫ�ҵ����߹���һ��һֱ����������������ҵ�����ݸ��µĽ��ȣ������������ݵĸ��º�ҵ�����ݵĸ����ܱ�֤ԭ���ԡ����Ҹ����������ȵ��������ó�ҵ�����ݸ��µ����ݣ��������ǾͿ���������������������������

��΢�ŵ�ҵ���У���ͬҵ���Ľ������ݲ�ͬ��

  • 1��������¼��ʹ����Ϣ��rowid��
  • 2���ղ���ʹ���ղظ���̨ͬ����updateSequence��
  • 3����ϵ���Ҳ�������һֱ�����Ľ������ݣ�������ͨ������ϵ�����ݿ��б������������и��µ���ϵ�˵�΢�ź�����Ϊ�������½��ȣ���

����������3���㣬�������ݵ�ʹ�÷������£�
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-7.png

����ҵ�������Ƿ񱣴��ɹ�������֪ͨ�Ƿ񵽴�ȫ�ļ���ģ�顢���������Ƿ񱣴��ɹ����������������߼����ܱ�֤�����ɹ���ҵ�����ݶ��ܳɹ�����������

�����е�һ���ؼ��������ݺͽ���Ҫ��ͬ��������һ�����£�����Ҫ������ͬ�����ݿ��У��������ܱ�֤���ݺͽ��ȵĸ��µ�ԭ���ԣ�WCDB���������ݿ���Ϊʹ��WALģʽ���޷���֤��ͬ���ݿ���������ԭ��������

����һ������ͼ��û�л�����������΢������ʱ�������鵽ҵ������С���������ȣ�����һ����ζ��ҵ�������𻵺��������ˣ�����������Ҫɾ�������������������ȡ�

����ÿ����������Ӧ��Ч��ҵ�����ݣ�����Ҫ��ҵ������ɾ��֮������ҲҪ����ɾ��������ҵ�����ݵ�ɾ����������ɾ�����첽�ģ�������ҵ������ɾ��֮������ûɾ����������

���������ᵼ���������⣺

  • 1��һ�����������ᵼ�������ٶȱ������������������ָ��ʺ�С������Ӱ�����Ժ��Բ��ƣ�
  • 2�����ǻᵼ���û��ѵ���Ч���ݣ�������Ҫ�����ġ�

����������2���㣺��ΪҪ��ȫɾ��������Ч�����ɱ��Ƚϸߣ��������Dz����˶��Լ����ķ����������������⣬������������������Ҫ��ʾ���û�ʱ���ż������������Ƿ���Ч����Ч�Ļ�����ʾ���������������첽ɾ����Ӧ����������Ϊ�û�һ���ܿ��������ݺ��٣����Լ����߼���������������Ҳ���Ժ��Բ��ơ�����������������ʵ����Ҳ�����Ƕ����ӵ��߼���Ϊ����������չʾ���ݵ������ԣ�����ҲҪ��չʾ��������ʱ����ҵ�����ݣ�����Ҳ��˳������������Ч�Եļ��顣

IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-8.png

8.3�������ٶ��Ż�


����ֻ����������ʱ���Ż��õ������ĸ������ȼ���û��ҵ��������ô�ߣ����Ծ����ܸ�����ҵ�����ݲ�ȥ������������

����������������������

  • 1�����ٴ��̵�д������������ƽ���������ٶȣ�
  • 2����һ�������У�������SQL�����Ľ����������Է���ʹ�ã����Լ���SQL�����Ľ�����������������ƽ���������ٶȣ�
  • 3����������Segment���������Ӷ�����Merge Segment�����Ķ�д���ġ�

��Ȼ��Ҳ���ܱ���̫��ҵ�����ݲ��������������û�Ҫ����ʱ�����������������Ӷ���������������������

����ǰ����Segment�Զ�Merge���ƣ�������д���ٶȷdz��ɿأ�ֻҪ���ƺ������Ͳ��õ������������������ĸߺ�ʱ���⡣

�����ۺϿ����˵Ͷ˻����Ľ������ٶȺ�����ҳ��������ʱ�䣬ȷ��������������������������Ϊ100����

ͬʱ�����ǻ����ڴ���cache����΢�������ڼ�������δ������ҵ�����ݣ��ڼ��������¸�û�����ü���������ҵ�������ṩ�����ڴ���������֤���������������ԡ���Ϊcache��һ��΢�������ڼ�������δ������������Ҫ���������Ĵ���IO������΢���������ᴥ��һ�ν������߼��������е�δ������ҵ�����ݽ�һ��������

�ܽ�һ�´�����������ʱ����������

  • 1��δ������ҵ�����ݴﵽ100����
  • 2�������������棻
  • 3��΢��������

8.4ɾ�������ٶ��Ż�


������ɾ���ٶȾ����������������»���ʱ�Ƚ����׺��ӵ����أ���Ϊ��ɾ����ҵ�����������ױ��͹����ᱻ����Ϊ�ǵ͸��ʳ�����

��ʵ�ʱ��û�ɾ����ҵ�����ݿ��ܻ��ﵽ50%���Ǹ����ɺ��ӵ�������������SQLite�Dz�֧�ֲ���д���ģ�ɾ������������Ҳ������Ӱ�쵽������д���ٶȣ���Ϊ�����������벻�ɿ����ء�

��Ϊɾ��������ʱ��������ҵ�����ݵ�idȥɾ���ġ�

��������ɾ�������ٶȵķ�ʽ�����֣�

  • 1����һ��ҵ������id��FTS������rowid����ͨ������
  • 2����FTS��������ȥ��ҵ������Id��һ�е�UNINDEXEDԼ������ҵ������Id���ӵ���������


���ﵹ��������ʵû����ͨ������ô��Ч��������ԭ����

  • 1����������������ͨ���������˺ܶ�������Ϣ������Ч�ʵ�һЩ��
  • 2��������Ҫ����ҵ���ֶβ���ȷ��һ����������ʱ�����������ǽ��������������ģ�ֻ��ƥ������һ��ҵ���ֶΣ������ֶξ��DZ���ƥ�䣬������������Ч�ʻ��ܵ͡�

8.5�Ż�ǰ����Ч���Ա�


������¼���Ż�ǰ�����������������£�

IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-9.png IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-10.png

IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-11.png

�ղص��Ż�ǰ�����������������£�

IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-12.png IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-13.png

IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_2-14.png

9��Ӧ�ò��Ż�3�������߼��Ż�


9.1����


�û���iOS΢�ŵ���ҳ��������ʱ�������߼����£�
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_3-1.png

����ͼ��ʾ�����û�����������������֮�󣬻Ტ�з�������ҵ�����������񣬸�����������ִ����֮�����ٽ������������ص����̸߳�ҳ��չʾ�������߼��������û������������ݶ������ظ���

9.2������������Ӧ֧�ֲ���ִ��


��Ȼ���ڲ�ͬ���������Ѿ�֧�ֲ���ִ�У����Dz�ͬҵ�����������������߼������ܴ��������������������߼����ӵ�������ʱ���ܾã����������ܳ��ַ����ֻ��IJ��д���������

���ǻ����Խ����д����������뵥�����������ڣ����������ִ�����ʽ��

1��������������������ҵ�񣨱���������¼�����������Խ��������ݾ��ִ洢������FTS��������ע�����ﲻ���ֵĻ����ǻ����ڶ̰�ЧӦ������������ʱ���Բ�������������������Ȼ�����ܸ������������������ٽ���ͳһ�������������ֵ������������Ȳ���̫��Ҳ����̫�٣�̫���ᳬ���ֻ�ʵ�ʵIJ��д���������Ҳ��Ӱ�������������������ܣ�̫���ֲ��ܳ������ò��д�����������ǰ΢������ʮ��FTS���洢������¼���������ڸ�Ϊʹ���ĸ�FTS����

2�����������߼����ӵ�ҵ�񣨱�����ϵ�������������Խ��ɶ���ִ�е������߼�����ִ�У����磺����ϵ�����������У����ǽ���ϵ�˵���ͨ�ı�������ƴ����������ǩ�͵�������������Ⱥ��Ա����������ִ�У�����֮���ٺϲ���������������������Ϊʲô��Ҳ�ò����ķ�ʽ�أ���Ϊ�����������������ٵij����������ĺ�ʱ��Ҫ�Ǽ��������������Ļ��ڣ��������Կ���һ��B������һ��B�����ֳɶ�����������ʱ�������ɱ����½���

9.3��������Ӧ֧���ж�


�û��������������������ݵĹ����п��ܻ��Զ����η�������������������ǰһ�η���������������ûִ����ʱ�����ٴη���������������ǰ���������������ͻụ��Ӱ���Է����ܡ�

�����������û��������ݴӶ̵����Ĺ����л�ͦ���׳��ֵģ���Ϊ�����ı��̵�ʱ�����н����ͺܶ࣬��������Ҳ�͸��Ӻ�ʱ���Ӷ����л���ײ�Ϻ���������������̫������ͬʱִ�л������������ֻ����̡����ڴ������⡣

����������Ҫ����������֧����ʱ�жϣ������Ϳ����ں�һ����������������ʱ�����ܹ��ж�ǰһ�ε��������񣬱������������������⡣

��������֧���жϵ�ʵ�ַ�ʽ�Ǹ�ÿ��������������һ��CancelFlag���������߼�ִ��ʱÿ�ѵ�һ���������ж�һ��CancelFlag�Ƿ���λ��������λ�˾������˳��������ⲿ�߼�����ͨ����λCancelFlag���ж�����������

�߼���������ͼ��ʾ��
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_3-2.png

Ϊ�������������ܹ���ʱ�жϣ�������Ҫ�ü���CancelFlag��ʱ�������������ȣ�Ҫʵ������Ŀ����Ҫ������ʱ����ʹ��OrderBy�Ӿ��Խ�������������

��ΪFTS5��֧�ֽ�������������������ʹ��OrderBy�Ӿ�ʱ��SQLite��������һ������ǰ����������ƥ����������������������������һ�������ĺ�ʱ������������ȫ�������ĺ�ʱ���ж��߼���ʧȥ�����塣

��ʹ��OrderBy�Ӿ��Ͷ������߼��������������ƣ�

1�������ݿ���ȡ���н���֮�������������ǿ����ڶ�ȡ����ʱ�������������ֶ�һ��������Ȼ���ڶ������н���֮���ٶ����н���ִ����������Ϊ�����ĺ�ʱռ��������ʱ�ı����ܵͣ����������㷨�����ܴ�ͬС�죬���������������ٶȵ�Ӱ�����Ժ��ԡ�

2������ʹ�÷ֶβ�ѯ����ȫ�ļ������������У��ֶβ�ѯ��ʵ��û��ʲô���õġ���Ϊ�ֶβ�ѯ��Ҫ�Խ������򣬶Խ���������Ҫ�������н��������Էֶβ�ѯ�����ܽ���������ʱ�����ǰ���FTS������Rowid�ֶβ�ѯ������Rowid������ʵ�ʵ�ҵ����Ϣ����

9.4������ȡ����Ӧ���ٻ�


����ʱ��ȡ���ݵ���Ҳ�Ǿ���������ʱ��һ���ؼ����ء�

FTS������ʵ�����ж���SQLite��ͨ�����ɵģ�������һЩ�����洢ʵ�ʵĵ����������ݣ�����һ�������洢�û����浽FTS��������ȫ��ԭ�ġ�������ʱ��ȡRowid����������ʱ������Ҫ��Rowid������ԭ�ĵı��Ķ�ȡ���ݡ�

�����������������ڲ�ִ�й������£�
IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_3-3.png

������ȡ����Խ�������������ٶ�Խ�죬���Ҷ�ȡ���ݹ���Ҳ���������ڴ���������

���Dz��õķ�ʽ�ǣ�����ʱֻ��ȡҵ������id������������ҵ�����ԣ��ź���֮��������Ҫ���û�չʾ����ʱ������ҵ������id������ȡҵ�����ݾ������ݳ���չʾ������������չ��Ҳ���ܺã������ڲ����Ĵ洢���ݵ������£����ݸ���ҵ�������󲻶ϵ�����������չʾ�����ݡ�

���и��ط�Ҫ�ر���һ�£���������ʱ������Ҫ��ȡ������Ϣ��SQLite��highlight��������������������ΪҪ��ȡ�����ֶβ���Ҫ���ı���ԭ�Ķ�ȡ��������Ҫ���ı�ԭ���ٴηִʣ����ܶ�λ����λ�õ�ԭ�����ݣ������������������·ִʴ��������ķdz����ԡ�

��չʾ��������ʱ���λ�ȡ����ƥ�������أ����Dz��õķ�ʽ�ǽ��û��������ı����зִʣ�Ȼ����չʾ����ʱ����ÿ��Token��չʾ�ı��е�λ�ã�Ȼ�����Ǹ�λ�ø�����ʾ��ͬ����Ϊ�û�һ�������Ľ��������Ǻ��ٵģ������ĸ����߼��������������Ŀ��Ժ�������

��Ȼ�����������ܸ��ӵ������£�ֱ�Ӷ�ȡ������Ϣ�DZȽϷ��㣨���磺��ϵ��������ʹ��ǰ���ᵽ��SubstringMatchInfo��������ȡ������������������Ҫ������ΪҪ��ȡƥ���������ڵIJ㼶��λ���������������������������·ִʵIJ����������⡣

9.5�Ż�ǰ����Ч���Ա�


������΢�Ÿ�����ҵ���Ż�ǰ����������ʱ�Աȣ�

IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_3-4.png    IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_3-5.png

IMȫ�ļ�������ר��(��)��΢��iOS�˵�����ȫ�ļ��������Ż�ʵ��_3-6.png

10��������


ĿǰiOS΢���Ѿ���������ȫ�ļ�����������ȫ��Ӧ�õ�������¼����ϵ�˺��ղص�����ҵ���С�

ʹ���·���֮����ȫ�ļ����������ļ�ռ�ÿռ���С���������º�ʱ���١������ٶ�Ҳ�����ˣ�����˵ȫ�ļ��������ܵõ���ȫ��λ������

��¼��QQ��΢���ŶӼ������»���


��΢������Ȧǧ�ڷ����������ļ�����ս��ʵ���ܽ���
����Ѷ����������Android���ֻ�QQ�Ļ����������Ż�ʵ����
��΢���Ŷӷ�����iOS��΢�ŵĸ�����ͨ��key-value��������ʵ����
��΢���Ŷӷ�����iOS��΢�������η�ֹ�����ַ����µ�ըȺ��APP�����ģ���
����Ѷ����������Android��Q���߳���������ϵͳ����ʵ����
��iOS��̨����ʵս��΢���տ���������Ѽ����ܽ���
��΢���Ŷӷ�����΢��ÿ���ڴ�ʵʱ����Ƶ���챳���ļ���������
����Ѷ�Ŷӷ��� ��һ����Q����������ͼƬ��ʾbug��׷�ٹ��̷�����
��΢���Ŷӷ�����΢��Android��С��Ƶ������������Щ����
����ҵ΢�ſͻ�������֯�ܹ����ݵ�ͬ�����·����Ż�ʵս��
��΢���Ŷ���¶��΢�Ž��濨������bug��15����������������ȥ����
��QQ 18�꣺����8���»���QQ��̨�����ӿڸ��뼼����
���»�8.89�ڵij���IM΢�������ν���Android�˼��ݲ��Ե���
��΢�ź�̨����ʱ�����ĺ����������ȷּ��ܹ�����ʵ����
��΢���Ŷ�ԭ��������Android��΢�ŵ�ӷ��֮����ģ�黯ʵ��֮·��
��΢�ź�̨�Ŷӣ�΢�ź�̨�첽��Ϣ���е��Ż�����ʵ��������
��΢���Ŷ�ԭ��������΢�ſͻ���SQLite���ݿ������޸�ʵ����
����Ѷԭ������(һ)�����δ��������ƶ��������ֻ�QQ��ͼƬ�����ٶȺͳɹ�����
��΢����һ��ͨ�Ű�ȫ��������������TLS1.3��MMTLS������
��΢���Ŷ�ԭ��������Android��΢�ź�̨����ʵս����(���籣��ƪ)��
��΢�ż����ܼ�̸�ܹ���΢��֮��������������(�ݽ�ȫ��)��
��΢�ź����û������ĺ�̨ϵͳ�洢�ܹ�(��Ƶ+PPT) [��������]��
��΢���첽������ʵ����8���»����ǧ�����ӱ����ĺ�̨����������
��΢������Ȧ��������֮��PPT [��������]��
��΢�Ŷ�����Ӱ���ļ������鼰����������ȫ�ģ���
���ܹ�֮����3������Ա�ɾ�΢������Ȧ�վ�10�ڷ�����[����Ƶ]��
�������ѱ䣺��֤΢��ǿ����̨�ܹ���0��1���ݽ����̣�һ����
��΢���Ŷ�ԭ��������Android�ڴ�й©���غ��Ż������ܽ���
��Android��΢�Ű�װ�������ʡ�ʵս��¼��
��iOS��΢�Ű�װ�������ʡ�ʵս��¼��
���ƶ���IMʵ����iOS��΢�Ž��濨�ټ��ⷽ����
��΢�š�������Ƭ�������ļ���������
���ƶ���IMʵ����iOS��΢��С��Ƶ���ܼ�������ʵ¼��
���ƶ���IMʵ����Android��΢�����δ��������������ܣ�һ����
���ƶ���IMʵ����ʵ��Android��΢�ŵ���������������
���ƶ���IMʵ�����ȸ���Ϣ���ͷ���(GCM)�о�������΢�ţ���
���ƶ���IMʵ����iOS��΢�ŵĶ��豸�������䷽��̽����
��IPv6�������⣺�������Ӧ����״������ʵ������ƪ����
���ְ��ֽ�����ȡAndroid��΢�ź���Q��������¼(���������о�ѧϰ)��
��΢�ż���������΢�ŵĺ���IM������Ϣ���к�����ʵ�����㷨ԭ��ƪ����
���罻����������������(һ)��ȫ������QQ�����������������ܹ�������ʵ�ֵ���
���罻����������������(��)������΢��ҡһҡ������0��1�ļ����ݽ���
���罻����������������(��)��΢��ҡһҡ�����걳���ļ���ϸ����
���罻����������������(��)��΢�ź���ϵͳ������Ӧ�Ը߲�������
���罻����������������(��)��΢�ź���ϵͳ������ʵ�ָ߿����Ե���
���罻����������������(��)��΢�ź���ϵͳ�Ĵ洢���ܹ��ݽ�ʵ����
���罻����������������(ʮһ)������΢�ź��������㷨(������ʵ��)��
��IM�������䣺ʷ����ȫ��΢�Ÿ��ֹ��ܲ������߼��������ϻ�����
��΢���Ŷӷ�����΢��ֱ�������ҵ�����1500�����ߵ���Ϣ�ܹ��ݽ�֮·��
����ҵ΢�ŵ�IM�ܹ����ƽ��أ���Ϣģ�͡�����Ⱥ���Ѷ���ִ����Ϣ���ص���

��ʱͨѶ�� - ��ʱͨѶ������������ ��Դ�� - ��ʱͨѶ������������

��һƪ���ڵ�¼�ж��������û�ȡ������ʱ�� ����ʾ����������ʲôԭ������һƪ������IM���촰���з���ͼ ���� �ļ�֮�������β�����

��������¼�����¼���ר��

�Ƽ�����
���� 6
����ǰ�Ҹ���΢��֮ǰ������ʵ����һ���ִ���������½������һЩ�������õ� API �ͽ��ͷִʵĹ��ܣ�Ӧ����Ŀǰ���õĿ�Դʵ���ˣ������ᵽ���Ż�Ҳ�Ѿ��У�����Ȥ��ͬѧ���Թ�ע https://github.com/wangfenjin/
���ã�wangfenj ������ 2022-03-02 07:12
����ǰ�Ҹ���΢��֮ǰ������ʵ����һ���ִ���������½������һЩ�������õ� API �ͽ��ͷִʵĹ��ܣ�Ӧ���� ...

Ϊ�����ޣ���star��
ͦ�����ķ���,���ǿ�����
���ã�mengzhisuoliu ������ 2024-06-10 21:47
ͦ�����ķ���,���ǿ�����

��������ʾ�㻹�ò���
���ǻ��Ǽ��ֿ�����,�ܲ���������,��л
���ã�mengzhisuoliu ������ 2024-06-22 22:05
���ǻ��Ǽ��ֿ�����,�ܲ���������,��л

���ĺ�ʹ������
����¥�� ×
ʹ��΢�Ŵ��ͣ� ʹ��֧�������ͣ�

���ض���