高并发操作和查询的数据采集和查询系统的oracle数据库设计建议
(1) 使用分布式垂直切分。由于已经使用了Oracle RAC 提供分布式的集群服务。所以对于产生大数据和高并发的表,可以采用数据库垂直分片(比如1-500号集中器的数据采集到数据库A、500-1000到B)。数据分片,是将整体数据分摊在多个存储设备上,这样每个存储设备的数据量相对就会小很多,以此满足系统的性能需求。分区可以提高可管理性、性能与可用性,从而给各种各样的应用程序带来极大的好处。当然一个合理的分片策略是最关键的。不当的分片策略有可能反而带来性能的下降。
(2) 使用主从表。主从复制、读写分离,减少生产系统压力。也就是说,对应需要频繁进行写操作的数据表,为该表设置从表。每5分钟将主表数据同步到从表。所有查询的操作都对从表进行。这样写操作针对主数据库表,读则是从“从数据库”。虽然读操作略有延迟,因为集中器本身就是20分钟提交一次数据,所以只要同步时间在20分钟以内,对数据的实时性并不会产生大的影响。但是这样大大提高了检索的效率。
(3) 使用分区表。避免一个表过大,当期数据与历史数据分离,提升存储和处理效率。
虽然Oracle单张表的最大记录条数十3.6E+17。但一个表一旦数据量达到一定规模。性能方面一定会出现问题。通过使用分区表,将当期数据与历史数据分离,这样是可以大大提高检索和操作的效率的。
在分区表的基础上进行数据存档是对过期的数据进行分开存储,当然存储的时间根据实际需求制定。这需要对数据以及应用程序对数据的使用情况,有非常充分的了解。比如电子商务公司的大数据处理只将3个月内的数据存入活跃数据库,而旧订单则被存入单独的存储。这个途径同样可以运用于抄表系统的数据仓库。当然可以存储更多的近期数据用于报告和查询,使用频度少的数据可以被存入单独的存储设备。
(4) 定期进行数据清除。有时候我们一直忙于收集数据而不清楚究竟需要保存多少数据,如果你存储了非常多用不到的数据,那么这将毫无疑问的降低你有效数据的处理速度。在业务需求的基础上审查数据是否可以被删除,从中分析出需要储存数据的类型,不仅会节省存储空间,同样会提升有效数据的分析速度。主要的方法是给数据仓库建立附加列,比如created_date、created_by、update_date及updated_by。通过这些附加列可以对数据进行阶段性的访问统计,这样就可以清楚数据的有效周期。这里需要着重对待的是数据清除的逻辑。比较好的是Oracle自身就具备了强大的归档能力,执行alter database archivelog;即可将数据库设置成archive log mode,Oracle将会自动归档。
(5) 使用memcached缓存系统。Memcached是一个通用的分布式内存缓存系统,主要用于减少动态应用的数据库负载,提升访问数据库的速度,它具有高性能和分布式等优点。。由于Memcached可以有效减少Web站点数据库的负载,它已经成为目前主流的互联网网站所采用的缓存解决方案。Memcached已经是一种非常成熟的缓存解决方案产品,它被广泛应用于负载大、并行程度高的网站之上,许多著名的网站,如Facebook、Sina、豆瓣等都在其网站实现中或多或少的使用了Memcached产品。通过使用Memcached缓存系统可以大大提高服务器的响应速度。在用户数据也都比较复杂、用户数据之间的关联度也比较高、而且需要对数据库进行频繁的更新或检索操作,采用Memcached机制正好可以很好的解决这些问题。
(6) 使用物化视图。Oracle的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。
(7) 使用数据冗余化设计。通过数据库字段的冗余化设计,减少表间连接查询。
在插入数据的时候,在多个表内生成同种字段的数据,从而使得在查询时,减少表连接的格式,从而能够提高查询的效率,减轻数据库的查询负荷。
(8) 合理使用索引。支持混合索引机制,集成Bitmap和B-Tree技术。通过索引的合理设置,可以大大提高查询效率。比如Bitmap索引比较适合决策支持系统,因为它虽然更新比较耗时。但对静态数据查询效率非常高。而B-tree 索引很适合 OLTP 应用程序,因为OLTP 系统经常更新和删除。
(9) SQL优化。查询时,避免子查询,少用模糊匹配,少用*,不要union等;操作时,避免长事务,长锁,用行锁定替代页锁定等。