设计的思路
表的设计
参考: https://blog.csdn.net/H215919719/article/details/128131512
select * from t_user where id <![CDATA[ < ]]> #{id}
需要解决的问题
1.需要存储材料的nas卷地址和base64数据以及对应的材料类型
材料类型id和类型详情
是身份证啊,还是什么,目前主要和任务相关
base64一个时间戳+accept_no作为主键,对应的数据为base64
accept_no作为普通索引,对应对行nas卷地址
我估计这耗时会比较多,所以这一块如果允许部分数据丢失的话,放到redis当中
这一块是否可以剔除掉,因为我们通过sync的方式将数据放入到磁盘了,然后consumer肯定会消费,如果多次消费失败了(失败的次数,通过状态体现),邮件告知
2.一单受理可以多次调用finishTask,一个受理在mq之后,只能消费一次
会出现情况的问题:
一:一个受理调用一次mq,被多次消费
二:多次调用同一个受理,如果只是修改对应记录的状态,那么可能第二次同一个受理过来之后,会更改状态,所以需要除了accept_no和task_id的另外的一个字段
如果说oracle在没有主键的情况下,是顺序添加数据的,那么我只用在添加一个时间戳的字段便可,然后鑫哥根据受理号和task_id和对应的时间戳进行一个获取排序,然后修改,然后删除时间戳之前的数据
-- 但是通过chatgpt
在 Oracle 中,如果没有为表明确指定主键,则系统不会自动创建递增的隐藏列。
但是,Oracle 提供了一种称为“序列(Sequence)”的对象,它是一个独立的数据库对象,用于生成唯一数字序列。您可以使用序列来为表创建一个递增的列,在语句中显式地引用该序列。例如,可以使用以下语句创建一个名为 my_sequence 的序列:
到时候参考一下其他的序列,暂时定位NUMBER(38)类型
CREATE SEQUENCE my_sequence START WITH 1 INCREMENT BY 1;
然后,您可以使用以下语句将该序列与表结构相关联,并在插入新行时将其值分配给新行的特定列:
CREATE TABLE my_table (id NUMBER, name VARCHAR2(50));
INSERT INTO my_table (id, name) VALUES (my_sequence.NEXTVAL, 'John Doe');
INSERT INTO my_table (id, name) VALUES (my_sequence.NEXTVAL, 'Jane Smith');
-- 这一个设计忽略
时间戳+accept_no作为主键(因为在插入的时候,肯定会走主键,找到对应的叶节点,然后插入数据,并且随着时间戳的递增,可以忽略后面受理号,那么就是按照时间戳的顺序进行一个插入操作,不会插入到b+树的中间,导致叶分裂的问题)
时间戳的获取:在插入的时候获取时间戳
目前只是在这一个b+树上做了测试: https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
鑫哥那边不去做组合索引(会增加insert的难度,因为需要维护另外一颗B+树),直接拿着受理号进行主键的模糊匹配,
时间戳 和 clob 以及oracle的序列
表的简单设计
create table KK
(
id NUMBER(30) primary key,
mytime TIMESTAMP(6),
baseaa CLOB
);
CREATE SEQUENCE my_sequence START WITH 1 INCREMENT BY 1; -- 自增序列
对应的java实体
public class Kk {
private Long id;
private Timestamp mytime;
private String baseaa;
}
对应的java插入代码
@RequestMapping("time")
public String time(){
SqlSession sqlSession = firstSqlSessionFactory.openSession();
KkMapper mapper = sqlSession.getMapper(KkMapper.class);
Kk kk = new Kk();
int id = (int)(Math.random()*10000);
long time = System.currentTimeMillis();
System.out.println(time);
Timestamp timestamp = new Timestamp(time);
kk.setMytime(timestamp);
String str = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAeAB4DASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAACAcGAwT/xAAsEAABAwMDAgUDBQAAAAAAAAABAgMEBQYRACExBxIIE0FRYRRSgSMyM0Jx/8QAFwEAAwEAAAAAAAAAAAAAAAAAAgMEAf/EACIRAAICAQQBBQAAAAAAAAAAAAECAxEAEiEiQQQjUYGRwf/aAAwDAQACEQMRAD8ASN4V1i2bYqdZljLMJhTxT9xA2T+TgfnUNpVbcq1oOXpXqFErSR/M5KwtzszghhkjsS2k7D+ysFRydaXxP1+JG6eS6OJSEz5y0JS1juUQD3EfGcD/ADnWNtKiIV02pVCuwMzqf2h/yo61ocaBJWgFQ32zyPfB99TzSiMFiCaHQs/WORCRY7OeuoXm3ZlWo0+n0qZRIk6QlMmC635bMlCsJK0jcBaNthjbkeukU0tLraVoIUhQCgR6g6JfW+NMkUKDLYmMGkQXUpbhBBLjCDhKFKUSe8gbHGOfXfSO6bV2LXrQpj8Z9Dq0x0IcCTuCBjOPnGjRrOY44g5GvEj0+U3bC65Gflzqh9Z+oSjuUltecISEj7sDPyNSKReNWp7XkTI8qK8Rgea2pGRjjfTMuSHUJK2Vw32ENtkq7HAdzjGdtS2/7DqN1MhqS5TcZHcpQXnAOdsDnUUpmWXSkdrtvY+e7x0cikcjh3nVmrV2iymWoUt2OrAU420tYAyD6D40nuinT1y3rdgT3Zs9idMi90qMpxKkBRIKSMcYA99878DXS1LdqVDiJiwnIKUDA4UOBjHHGqDbsabEhBqa804kfsDYI7RnjReM0zP6seke9j8ODMy1SnP/2Q==";
kk.setBaseaa(str);
mapper.insert(kk);
Kk kk1 = mapper.selectkk(kk);
System.out.println(JSONObject.toJSONString(kk1));
return " SUCCESS";
}
mybatis的插入
<insert id="insert" parameterType="com.moredatabase.entry.Kk">
insert into kk (id,mytime,baseaa) values(my_sequence.NEXTVAL,#{mytime},#{baseaa})
</insert>
浙公网安备 33010602011771号