现在要设计一个记录数非常大的数据库表,表的结构非常简单,但记录数会非常大,可能会有几十亿条,但表的字段只包括几个数字列,再有一个列用来保存图片,我现在准备采用BFILE类型来把图片路径保存在表中,另外表会根据某个列数据进行分区.在设计这样的大表还应该注意哪些问题..欢迎大家赐教.凡提出较好意见的,可以另行开贴再加分.
解决方案 »
- 基础知识请教
- long raw ;如何在存储过程里 进行 insert?
- oracle 中的时间比较问题
- 关于UPDATE的问题
- 请问LOCK TABLE hatSTR_TEN IN ROW EXCLUSIVE MODE NOWAIT怎么样解除LOCK?
- 多个触发器如何一起备份和倒入?
- 超难SQL语句求救!!在线!
- 请教:如何在Oracle9i2中设置UTL_FILE_DIR的值???
- oracle8.0.5在nt4.0上的OracleTNSListenter80服务不能起来?急急急!!!!!!!!1
- 使用SQL语句隐藏查询后的某一列,求大神教教
- 高手请进,关于DB2移植orcale问题
- 什么原因导致DEAD CONNECTION 不能从v$session 中被自动DROP掉
这个时候如何建索引会比较好, 将级别建为簇索引,X,Y建为复合索引? 还是三个列统一建为复合索引好..
他是想得到的图片的路径后,直接去那台服务器去读图.
另外,对于这样的超大数据库,磁盘是一个整体的阵列为各个服务器所共享,还是每一个服务器有自己的磁盘阵列呢? 这个问题可能有点弱..我过去也没做过这么大的数据库.还望大家能多多赐教.
rac集群一般是共享磁盘组,一般来说磁盘组的io性能很好,带宽高(高级的是光纤连接)。
rac集群的网络io不会集中在一台服务器上,会自动负载平衡。
google earth 是不是就是这么做的?
不知道你的数据是怎么进入的,我们系统对数据的装入也是有要求的.
第一,个就是分表操作,在以前用infomix之类的系统的开发都采用,我在做我们系统的时候第一个方案设计出来的就是分表,当然带来的问题是维护问题,系统中上万个表,基本上图形控制台是打不开,所以最好的方式是分表+分区,oracle专家也是这么建议的!
第二,簇索引我没有怎么用过,但是如果你经常3个组合查,就建复合索引,或者在类别上建建BITMAP索引,对x,y建复合索引,另外,我觉得呢,如果按我们现在开发系统的经验来说,你应该把类别做为分表,这样在类别上就不存在建立索引问题,而对x,y,按某种方式在表内进行分区
装入数据的要求是我们数据是批量装入的,一年集中在1,2个时间点,平时就是查询,而装入数据时候,系统上会有几十个并发解析10万-30万之间的数据包。
至于BFILE问题,我只是建议,也可能是自己学艺不精,因为我的数据文件一般在10m以上,所以在上亿后,存库老是出些莫名其妙的问题,所以最后干脆就存外部文件,至少在过程上,你少了一道由web服务器把数据包发包到数据库服务器的过程。
还有io均衡这些问题,我觉得一是自己调很难,加大难度和时间,也未必出来后最优,还不如利用硬件设备,还有像10g里面的ASM。我们的数据量像上面所说,在ibm 570,8cpu,32g内存下,并发解析数据包到40,50都没问题,时间在50秒以内都能完成10万数据装入,而查询这些就更不用说了,压力测试上800都没问题,当然这是非集群环境,当然你的具体业务还是由你分析,这些只是建议
另外一个是网络io,我看你提的是网络io,而不是磁盘io,不清楚你的这个网络io指得是客户请求到web服务器,还是web服务器到数据库服务器!因为我们业务的关系,oracle没有架集群,当然也是还用不到那功能,所以没有参考意见,至于web请求这块,我觉得解决这个方案应该很多吧?比如我们,最后是按照业务模块来划分的多台web服务器.当然我们系统特定和你的可能有一定程度类似,就是大部分时间主要是查询。
分区数目可以考虑增大。
每个区的表空间可以考虑放在不同的物理空间上。
分区索引是必须的。如果增删改频率较低,查询较多,可以考虑位图索引。
如果图片保存在表中,需要考虑将该字段的存储放在另一单独的物理空间上。同意上面描述。补充SELECT 描述考虑加入HINTS 描述
--并行处理
如:select /*+ parallel(tab,处理器个数) */