怎么控制利记体育的操作频率控制

自动控制系统中,采样频率,控制频率,它们之间有没什么关系?它们如何影响系统性能? - 知乎198被浏览5309分享邀请回答185 条评论分享收藏感谢收起查看: 2535|回复: 36
每秒900,一天400万数据,如何控制并发操作表数据?
论坛徽章:0
本帖最后由 skyspeed 于
13:19 编辑
监控项目,16个传感器,采样频率50hz,要求实时显示和历史查询。业务逻辑较为简单就是按照时间查询数据,无其他操作。
为了便于实时和历史显示的效率,设计 了实时表+历史表的方式存储数据,每隔1分钟从实时表导入到历史表中,实时显示读事实表,历史查询读历史表。
实时表, 存储一分钟数据,供WEb客户端调用
Create Table real_data(
record_time timestamp(3),
ac_1 Float,
ac_2 Float,
ac_3 Float,
ac_4 Float,
ac_5 Float,
ac_6 Float,
ac_7 Float,
ac_8 Float,
ac_9 Float,
ac_10 Float,
ac_11 Float,
ac_12 Float,
ac_13 Float,
ac_14 Float,
ac_15 Float,
ac_16 Float
)
Tablespace data_复制代码历史表结构一样,只是多了时间主键 和 时间分区。
Create Table history_data(
record_time timestamp(3),
ac_1 Float,
ac_2 Float,
ac_3 Float,
ac_4 Float,
ac_5 Float,
ac_6 Float,
ac_7 Float,
ac_8 Float,
ac_9 Float,
ac_10 Float,
ac_11 Float,
ac_12 Float,
ac_13 Float,
ac_14 Float,
ac_15 Float,
ac_16 Float
)
Tablespace data_test
PARTITION BY RANGE(record_time)&&
INTERVAL(numtodsinterval(1,'day'))&&
(&&
&&PARTITION P1 VALUES LESS THAN (TO_DATE('', 'YYYY-MM-DD'))&&
);&&
alter table history_data add constraint RECORD_DATE primary key (RECORD_TIME);复制代码历史表采用间隔分区,按照一天来分区,主要是基于以下的考虑
1. 主要的查询 是基于时间的,没有其他的查询。 比如
Select ac_1 From ac_test
Where record_time &= to_timestamp(' 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
And&&record_time &=to_timestamp(' 00:30:00', 'yyyy-mm-dd hh24:mi:ss');复制代码
2. 按天分区,主要看了一下执行计划,每天430万条数据,给出的执行时间大概50s, 如果换号一点的服务器,应该可以提高。
新建一个job,完成从实时表导入历史表
create or replace procedure copy_to_history Is
begin
&&Insert Into history_data Select * From real_&&
& & C
&&execute& &immediate 'truncate table real_data';
&&C
& &Exception& &
&&WHEN OTHERS THEN
& & log_write(SQLCODE||'---'||SQLERRM);& && &
end copy_to_复制代码现在模拟了实时数据插入,
Declare&&
time_index N
start_time Timestamp(3);
tmp_time Timestamp(3);
tmp_value1 F
tmp_value2 F
&&tmp_value3 F
tmp_value4 F
&&tmp_value5 F
tmp_value6 F
&&tmp_value7 F
tmp_value8 F
&&tmp_value9 F
tmp_value10 F
&&tmp_value11 F
tmp_value12 F
&&tmp_value13 F
tmp_value14 F
&&tmp_value15 F
tmp_value16 F
Begin& &
& &--initiaze the variable&&
& & time_index:=0;
&&--&&start_time:=to_timpstamp(' 00:00:00.000','yyyy-mm-dd hh24:mi:ss');& && &&&
& & SELECT to_timestamp(' 00:00:00:000', 'yyyy-mm-dd hh24:mi:ss:ff') Into start_time&&FROM DUAL;&&
& & dbms_output.put_line(start_time);& &
&&
& && && & While time_index&(50*60*60*24*7)
& && && &&&Loop
& && && && & -- add 20 millionseconds
& && && && & SELECT start_time+numtodsinterval((0.02*time_index),'SECOND') Into tmp_time&&FROM DUAL;
& && && && &-- dbms_output.put_line(tmp_time);
& && && && & -- create random number
& && && && & select dbms_random.value Into tmp_value1
& && && && & select dbms_random.value Into tmp_value2
& && && && & select dbms_random.value Into tmp_value3
& && && && & select dbms_random.value Into tmp_value4
& && && && & select dbms_random.value Into tmp_value5
& && && && & select dbms_random.value Into tmp_value6
& && && && & select dbms_random.value Into tmp_value7
& && && && & select dbms_random.value Into tmp_value8
& && && && & select dbms_random.value Into tmp_value9
& && && && & select dbms_random.value Into tmp_value10
& && && && & select dbms_random.value Into tmp_value11
& && && && & select dbms_random.value Into tmp_value12
& && && && & select dbms_random.value Into tmp_value13
& && && && & select dbms_random.value Into tmp_value14
& && && && & select dbms_random.value Into tmp_value15
& && && && & select dbms_random.value Into tmp_value16
& && && && & --dbms_output.put_line(tmp_value);& && && && &
& && && && &-- Insert Into ac_data (sensor_id,data,record_time) Values(sensor_index,tmp_value,tmp_time);
& && && && &Insert Into real_data Values(tmp_time,tmp_value1,tmp_value2,tmp_value3,tmp_value4,tmp_value5,tmp_value6,tmp_value7,tmp_value8,tmp_value9,tmp_value10,tmp_value11,tmp_value12,tmp_value13,tmp_value14,tmp_value15,tmp_value16);
& && && && &if mod(time_index,50)=0 then
& && && && &
& && && && &dbms_lock.sleep(1);
& && && && &End If;& && && &&&
& && && && & time_index:=time_index+1;
& && && &&&End L& && && &
& & Exception
& &&&WHEN OTHERS THEN
& &&&dbms_output.put_line('exception done!');
& &&&E复制代码
发现有两种不同结果:
1) 插入的速度过快的话(&&不加延时等待&&dbms_lock.sleep(1); 的情况下) ,出现 实时表 和历史表数据不一样的情况,历史表中的数据会存在丢失。 分析可能的原因是 copy_to_history 存储过程中,速度过快, insert into 执行较慢,此时又有新的数据插入实时表,到了truncate ,就把新的数据删掉了,没有导入到历史表。
2) 插入的速度延时 (加入延时等待dbms_lock.sleep(1); 的情况下),出现插了一段时间,历史表的数据停滞了,不增长了。
查看原因是,---ORA-00001: 违反唯一约束条件 (SYSTEM.RECORD_DATE), 即实时表中有一部分数据和历史表的数据有重叠,导致copy_to_history 存储过程中插入,违反了历史表中的主键约束。 分析可能的原因 是删除的数据时,insert into 还没完成,导致一部分数据还在实时表。
分析两种情况就是一个session 要不停的插入,一个session 要不停的拷贝和删除,造成对资源的并行操作,造成资源的使用问题,主要是整个存储过程的写法的问题,如何解决? 谢谢各位大侠
另外还有一个问题就是:&&由于历史表中有主键索引,插入的效率会不会随着时间的推移而变得非常慢,尽管每次插入就是3000条数据? 比较担心插入效率问题。
谢谢各位大侠,问题有点多。
认证徽章论坛徽章:1
建议你在从实时表导数据到历史表时,使用时间区分,如 01:01:00到 01:02:00,每次记录记录当前导入的结束时间,
或者使用序列,比如当前到100,那么只导入小于100的,下次获取序列为1000,那么只导入小于1000的。
认证徽章论坛徽章:1
还有一个问题就是实时表频繁的这么删除、插入,导致的高水位线的问题,建议定期move一下
认证徽章论坛徽章:1
--就是类似于这种
create or replace procedure copy_to_history Is
&&d_top_backup_date&&
&&d_curr_backup_
&&select top_backup_date + 1 / 24 / 60 / 60, top_backup_date + 1 / 24 / 60
& & into d_top_backup_date, d_curr_backup_date
& & from real_data_top_backup_
&&Insert Into history_data
& & Select *
& && &From real_data
& &&&where record_time between d_top_backup_date and d_curr_backup_
&&execute immediate 'delete from real_data where record_time between :1 and :2'
& & using d_top_backup_date, d_curr_backup_
&&execute immediate 'truncate tabele real_data_top_backup_date';
&&insert into real_data_top_backup_date
& & (top_backup_date)
& & (d_curr_backup_date);
&&WHEN OTHERS THEN
& & log_write(SQLCODE || '---' || SQLERRM);
end copy_to_
论坛徽章:0
建议你在从实时表导数据到历史表时,使用时间区分,如 01:01:00到 01:02:00,每次记录 ...
历史表已经分区了,按天间隔自动分区的。 这样可以提高检索的效率问题。
另外从实时表导入历史表,我是间隔一分钟导一次,导完后把实时表清空的。这样做主要是防止实时表过快增长,影响实时显示的检索。
论坛徽章:0
还有一个问题就是实时表频繁的这么删除、插入,导致的高水位线的问题,建议定期move一下
谢谢提醒。不过存储过程中使用的 truncate,而不是delete ,应该高水位问题不是太明显吧。
论坛徽章:0
--就是类似于这种
create or replace procedure copy_to_history Is
&&d_top_backup_date&&
谢谢,我试试看。
这样还要维护插入时间的表,会不会影响插入的效率啊。。
论坛徽章:0
自己顶一下,哈哈哈
论坛徽章:0
我自己顶一下,我自己顶一下
论坛徽章:0
用exchange partition 试试
itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号:10 广播电视节目制作经营许可证:编号(京)字第1149号所属分类: &
查看: 15|回复: 0
在利记体育里面打出来的金币有什么用啊?
发表于 昨天&22:22
玩GO-get好游戏官方认证
我刚刚在玩GO推荐游戏领取了10Q币
在利记体育里面打出来的金币有什么用啊?
全平台震撼公测 快来创造你的世界吧!
号召小伙伴一起加入 赢游戏限量周边!顶级真人娱乐场_互动百科
把你最喜欢的栏目添加到这里来哦
顶级真人娱乐场:阿里CEO张勇:今年双十一是走向新零售的起点
健美操信息网
顶级真人娱乐场名等竞赛成绩作准则,作出最后决定。考虑以上准则及可能性,本会董事局于今天特别会议中通过,现阶段较适宜改为提名东方及杰志参加该赛事,以完全取得以上提及之两个亚冠杯席位。鉴于上周末于韩国举行的面对曼联和穆里尼奥的心魔,温格表示:“我在比赛中也思考了这个问题。老实说这个问题很难回答。去年这种情况我们可能就输了,但今天没有,所以我们在前面有所改善。希望我们可以把这些抛开,找回
顶级真人娱乐场最近几年随着水力压裂技术取得了突破性进展,一场“页岩革命”让美国石油业突飞猛进。从年起,美国石油生产量开始大幅增长,目前日产量跃升至万桶左右,美国也因此摇身一变成为世界最大的石油生期的方案,并在新周期开始后付诸实施。可以预料,作为目前国内较为成功的赛事品牌,CBA联赛在下一个商务周期的品牌价值必将迈上一个新台阶,CBA公司力求脚踏实地,寻找最优市场开
顶级真人娱乐场:证监会对6宗案件作出行政处罚 含一宗期货市场操纵案
顶级真人娱乐场:表情符号说明跑半马的感觉 16个阶段你是否中枪
责任编辑:【周发歌】澎湃新闻报料:36 & 澎湃新闻,未经授权不得转载
关键词 >> 顶级真人娱乐场
澎湃新闻APP下载}

我要回帖

更多关于 频率控制 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信