CN108399236A - 一种数据缓存时id动态更新的方法 - Google Patents
一种数据缓存时id动态更新的方法 Download PDFInfo
- Publication number
- CN108399236A CN108399236A CN201810163287.8A CN201810163287A CN108399236A CN 108399236 A CN108399236 A CN 108399236A CN 201810163287 A CN201810163287 A CN 201810163287A CN 108399236 A CN108399236 A CN 108399236A
- Authority
- CN
- China
- Prior art keywords
- rowid
- data
- value
- increasing
- dynamics
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
Abstract
本发明涉及一种数据缓存时id动态更新的方法,步骤如下:在DBManager类中,创建allModel方法,在初始化时生成数据封装类dbWapper,并设定显式指定获取rowid的指令,读取数据库并写入缓存,将缓存数据通过转换方法FMRowResult转换为OC对象,调用解析方法parseFMResult读取OC对象,然后由动态创建对象方法createInstance创建对象,动态创建对象方法createInstance创建对象时,判断缓存数据中是否包含rowid的值,如果包含rowid的值,将其作为自增id的值返回。本发明,用rowid的值代替自增id,不再增加额外的自增id主键,对数据库中数据改动少,影响小,在无需增加新字段的前提下,实现唯一自增id的需求。
Description
技术领域
本发明涉及数据缓存技术领域,具体说是一种数据缓存时id动态更新的方法。
背景技术
数据库(例如SQLite)在插入数据时,会自动生成隐藏行号rowid(即隐藏列rowid,使用WITHOUT ROWID定义的表除外),用于唯一的标记表中的每个记录。现有技术方案中,表中插入的第一条记录的rowid为1,后续插入的记录的rowid依次递增1。即使插入失败,rowid也会被加1。所以,整个表中的rowid并不一定连续,即便用户没有删除过记录。
由于唯一性,所以rowid在很多场合中当作主键使用。在使用的时候,select *from tablename 并不能获取rowid,必须显式的指定。例如,select rowid, * fromtablename 才可以获取rowid列。查询rowid的效率非常高,所以直接使用rowid作为查询条件是一个优化查询的好方法。
但是rowid列作为主键,在极端情况下存在隐患。由于rowid值会一直递增,如果达到所允许的最大值9223372036854775807后,它会自动搜索没有被使用的值,重新使用,并不会提示用户。这时,使用rowid排序记录,会产生乱序,并引入其他的逻辑问题。
数据库中的表,在需要自增id功能时,需要单独设置主键,在后期修改主键时,操作繁琐,需要创建新表(新表中重新设置好所需的主键),将旧表中的内容复制到新表,删除旧表。这种方式导致数据库开销大,不利于使用,后期维护较繁琐。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种数据缓存时id动态更新的方法,用rowid的值代替自增id,不再增加额外的自增id主键,对数据库中数据改动少,影响小,在无需增加新字段的前提下,实现唯一自增id的需求。
为达到以上目的,本发明采取的技术方案是:
一种数据缓存时id动态更新的方法,其特征在于,包括如下步骤:
在DBManager类中,创建allModel方法,
在初始化allModel方法时,生成数据封装类dbWapper,所述数据封装类dbWapper设定显式指定获取rowid的指令,
通过数据封装类dbWapper读取数据库,将获取的数据写入缓存,
将缓存数据通过转换方法FMRowResult转换为OC对象,
调用解析方法parseFMResult读取OC对象,然后由动态创建对象方法createInstance创建对象,
动态创建对象方法createInstance创建对象时,判断缓存数据中是否包含rowid的值,
如果包含rowid的值,将其作为自增id的值返回,
如果不包含rowid的值,则不进行自增id赋值处理。
在上述技术方案的基础上,所述显式指定获取rowid的指令为select语句,获取对象显示指定为“rowid, *”。
在上述技术方案的基础上,在数据模型映射关系BaseModel中,将自增id的值赋值给p_rowid,
通过KVC强制设置p_rowid属性的数值如下:
将公共属性接口public:设置为只读readony,
将私有属性接口private:设置为读写readwrite。
本发明所述的数据缓存时id动态更新的方法,用rowid的值代替自增id,不再增加额外的自增id主键,对数据库中数据改动少,影响小,在无需增加新字段的前提下,实现唯一自增id的需求。
附图说明
本发明有如下附图:
图1本发明的流程图。
具体实施方式
以下结合附图对本发明作进一步详细说明。
如图1所示,本发明所述的数据缓存时id动态更新的方法,包括如下步骤:
在DBManager类中,创建allModel方法,
在初始化allModel方法时,生成数据封装类dbWapper,所述数据封装类dbWapper设定显式指定获取rowid的指令,
通过数据封装类dbWapper读取数据库,将获取的数据写入缓存,
将缓存数据通过转换方法FMRowResult转换为OC对象,
调用解析方法parseFMResult读取OC对象,然后由动态创建对象方法createInstance创建对象,
动态创建对象方法createInstance创建对象时,判断缓存数据中是否包含rowid的值,
如果包含rowid的值,将其作为自增id的值返回,
如果不包含rowid的值,则不进行自增id赋值处理。
上述方案中,通过将rowid的值赋值给id,实现自增id及id动态更新,无需单独设置id列,无需额外为id增加主键,有效减小数据库开销,后期可以便捷的修改、维护表及主键。
在上述技术方案的基础上,所述显式指定获取rowid的指令为select语句,获取对象显示指定为“rowid, *”。
在上述技术方案的基础上,在数据模型映射关系BaseModel中,将自增id的值赋值给p_rowid,
通过KVC强制设置p_rowid属性的数值如下:
将公共属性接口public:设置为只读readony,
将私有属性接口private:设置为读写readwrite。
公共属性接口设置为只读,则规避了缓存时的创建列操作和写入操作。有效避免误操作对数据带来的影响。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (3)
1.一种数据缓存时id动态更新的方法,其特征在于,包括如下步骤:
在DBManager类中,创建allModel方法,
在初始化allModel方法时,生成数据封装类dbWapper,所述数据封装类dbWapper设定显式指定获取rowid的指令,
通过数据封装类dbWapper读取数据库,将获取的数据写入缓存,
将缓存数据通过转换方法FMRowResult转换为OC对象,
调用解析方法parseFMResult读取OC对象,然后由动态创建对象方法createInstance创建对象,
动态创建对象方法createInstance创建对象时,判断缓存数据中是否包含rowid的值,
如果包含rowid的值,将其作为自增id的值返回,
如果不包含rowid的值,则不进行自增id赋值处理。
2.如权利要求1所述的数据缓存时id动态更新的方法,其特征在于:所述显式指定获取rowid的指令为select语句,获取对象显示指定为“rowid, *”。
3.如权利要求1所述的数据缓存时id动态更新的方法,其特征在于:在数据模型映射关系BaseModel中,将自增id的值赋值给p_rowid,
通过KVC强制设置p_rowid属性的数值如下:
将公共属性接口public:设置为只读readony,
将私有属性接口private:设置为读写readwrite。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810163287.8A CN108399236B (zh) | 2018-02-27 | 2018-02-27 | 一种数据缓存时id动态更新的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810163287.8A CN108399236B (zh) | 2018-02-27 | 2018-02-27 | 一种数据缓存时id动态更新的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108399236A true CN108399236A (zh) | 2018-08-14 |
CN108399236B CN108399236B (zh) | 2021-07-23 |
Family
ID=63095647
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810163287.8A Active CN108399236B (zh) | 2018-02-27 | 2018-02-27 | 一种数据缓存时id动态更新的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108399236B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100011033A1 (en) * | 2004-05-14 | 2010-01-14 | Mirapoint Software, Inc. | Method for mailbox migration |
CN102033948A (zh) * | 2010-12-22 | 2011-04-27 | 中国农业银行股份有限公司 | 一种数据更新方法和装置 |
CN102375890A (zh) * | 2011-11-02 | 2012-03-14 | 杭州合众信息工程有限公司 | 一种数据库无主键源端表的数据同步方法 |
CN106572165A (zh) * | 2016-10-26 | 2017-04-19 | 宜人恒业科技发展(北京)有限公司 | 一种分布式全局唯一id应用方法 |
CN106844529A (zh) * | 2016-12-29 | 2017-06-13 | 金蝶软件(中国)有限公司 | 缓存数据更新方法、装置和系统 |
-
2018
- 2018-02-27 CN CN201810163287.8A patent/CN108399236B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100011033A1 (en) * | 2004-05-14 | 2010-01-14 | Mirapoint Software, Inc. | Method for mailbox migration |
CN102033948A (zh) * | 2010-12-22 | 2011-04-27 | 中国农业银行股份有限公司 | 一种数据更新方法和装置 |
CN102375890A (zh) * | 2011-11-02 | 2012-03-14 | 杭州合众信息工程有限公司 | 一种数据库无主键源端表的数据同步方法 |
CN106572165A (zh) * | 2016-10-26 | 2017-04-19 | 宜人恒业科技发展(北京)有限公司 | 一种分布式全局唯一id应用方法 |
CN106844529A (zh) * | 2016-12-29 | 2017-06-13 | 金蝶软件(中国)有限公司 | 缓存数据更新方法、装置和系统 |
Non-Patent Citations (2)
Title |
---|
KIMHEROJAC: "sqlite数据表主键设置Id自增方法", 《CSDN》 * |
张璞: "基于Oracle DCN的缓存一致性技术", 《计算机工程》 * |
Also Published As
Publication number | Publication date |
---|---|
CN108399236B (zh) | 2021-07-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102177190B1 (ko) | 유연한 스키마를 사용한 데이터 관리 | |
CN103631907B (zh) | 一种将关系型数据迁移至HBase的方法及系统 | |
CN104866608B (zh) | 一种数据仓库中基于连接索引的查询优化方法 | |
CN104915383B (zh) | 一种通用数据库访问中自动适配对象的方法 | |
CN109753537A (zh) | 一种从关系数据到图数据的交互式数据迁移方法 | |
CN102629269B (zh) | 一种嵌入式数据库的检索及存储方法 | |
CN102693286B (zh) | 一种对文件内容与元数据进行组织管理的方法 | |
CN105608088A (zh) | 一种基于配置文件的数据库自动创建与数据动态记录方法 | |
CN110955655B (zh) | 动态cmdb数据库模型存储方法和系统 | |
CN101499069A (zh) | 内存数据库文件的更新方法及更新装置 | |
CN103488710B (zh) | 大数据页中高效存储非定长数据方法 | |
CN109857803A (zh) | 数据同步方法、装置、设备、系统及计算机可读存储介质 | |
CN102096671A (zh) | 一种boss数据库升级脚本的生成方法和设备 | |
CN104166705A (zh) | 数据库的访问方法及装置 | |
US6826563B1 (en) | Supporting bitmap indexes on primary B+tree like structures | |
CN116975159B (zh) | 一种增量数据同步的处理方法 | |
CN107273443B (zh) | 一种基于大数据模型元数据的混合索引方法 | |
CN108399236A (zh) | 一种数据缓存时id动态更新的方法 | |
CN112000732A (zh) | 一种基于触发器的异构数据库间相互同步方法 | |
CN111914028A (zh) | 一种基于图增量同步异构数据源数据关系的方法及装置 | |
JP2000155706A (ja) | オブジェクト指向とリレーショナル・データベースのマッピング方法、装置及びその記録媒体 | |
CN112052240A (zh) | 一种基于协处理器的HBase二级内存索引构建方法 | |
CN113722294B (zh) | 一种从图数据库到关系数据库的数据迁移方法和系统 | |
CN107577817A (zh) | 一种实体数据库的读写方法 | |
CN116450609B (zh) | 基于统一语法在异构数据源上建模的方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |