主键支持设置索引类型-二叉树或者哈希
Feature 特性
// c# code
[Column(IsPrimary=true,UseHASH=true)]
public string USER_ID{get;set;}
简要描述原因
这个框架其实主要还是用在Codefirst的场景,并且是作为基础底座使用,会面临好多的数据库情况,不同的排序规则甚至同一套代码用在不同环境下,他们数据库排序规则不一样。这使得主键只能使用雪花算法或者abp中那种特殊的guid,对于众多子项目的系统,大家并非都能生成一致的seqguid过雪花算法,加上k8s部署以及弹性伸缩的需要,特殊的有序主键需要多个部门共同协作,这并不容易。 所以,如果能够提供哈希索引类型的主键,会解决很大的问题,使用uuidv4做主键的系统,从来就没打算通过这个主键进行范围查找或者排序,一旦使用哈希索引,数据库便不会因此产生过多的碎片,也不会出现雪花算法的时钟回播问题,更不会出现弹性伸缩无法正确设置workerid的问题。
使用场景
默认使用guid做为主键的新老系统,不再为有序id的问题所纠结,不必为人工维护数据库中guid数据类型而纠结。也不需要让所有的子系统都统一某一个非正式的有序id。
对应的表结构 DDL 代码是什么
@2881099 我知道直接在数据库中操作的DDL,但是,在FREESQL考虑不同的数据库类型以及兼容性,应该是什么样的DDL。
在PostgreSQL中可以通过以下方式将表的主键索引设置为哈希索引:
- 创建表时使用 USING HASH 子句指定主键索引为哈希索引:
CREATE TABLE t (
id bigint PRIMARY KEY USING HASH,
data text
);
- 对已存在表使用 CREATE INDEX 来创建哈希索引作为主键索引:
CREATE INDEX ON t USING HASH (id);
ALTER TABLE t ADD PRIMARY KEY USING INDEX t_id_hash;
在Oracle数据库中,可以通过以下几种方式将表的主键索引设置为哈希索引:
- 创建表时使用 HASHKEYS 子句指定主键列为哈希索引:
CREATE TABLE t(
id NUMBER PRIMARY KEY,
name VARCHAR2(50)
)
HASHKEYS (id);
- 对已存在表使用 CREATE INDEX 语句创建哈希索引:
CREATE INDEX t_pk ON t(id) TABLESPACE tbs HASHKEYS (id);
IndexAttribute 目前有属性 IndexMethod 可以设置 pgsql