gpt4 book ai didi

java - Hibernate 会处理表 "bait and switch"吗?

转载 作者:行者123 更新时间:2023-12-02 04:23:47 26 4
gpt4 key购买 nike

我有一个每天都会变化的巨大数据集,它绑定(bind)到一个 Java 对象。我的应用程序在 DAO 层使用 Hibernate。

当我更改数据时,我需要重建索引,但如果我在使用 Activity 表时执行此操作,数据库将逐渐停止。

如果我有一个临时表来上传所有新数据并在此处创建新索引,那么我可以删除实时表并重命名我的临时表而不需要 Hibernate 通知吗?

最佳答案

我通过稍微改变我的数据结构解决了这个问题。

ALTER TABLE my_table RENAME to my_table_old;

然后我创建了一个与原始表同名的 View

CREATE OR REPLACE VIEW my_table AS
select * from my_table_old;

当我获得新数据集时,我创建一个新表(在名称末尾附加序列)

EXECUTE 'CREATE TABLE my_table_'||nextval('seq_table_id')|| ' AS SELECT * FROM my_table_old WHERE 1=2;'

创建所有索引并对其进行分析

EXECUTE 'CREATE INDEX idx_column1_'||currval('seq_table_id')|| ' ON my_table_'||
currval('seq_table_id')||' USING btree(column1);'||
EXECUTE 'CREATE INDEX idx_column2_'||currval('seq_table_id')||
' ON my_table_'||currval('seq_table_id')||' USING btree(column2);'

在完成所有这些操作的同时,我的网络应用程序继续映射到旧表,完全不受影响。

最后我分析一下表格

EXECUTE 'ANALYZE my_table_'||currval('seq_table_id');

一旦我对一切感到满意,我就会“做旧的切换”,并将我的观点指向新表

EXECUTE 'CREATE OR REPLACE VIEW my_table AS SELECT * FROM my_table_'||(SELECT last_value FROM seq_table_id)||';';

一切都会立即切换,已经索引,而 Hibernate 却一无所知!

关于java - Hibernate 会处理表 "bait and switch"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32447214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com