锁定老帖子 主题:3亿数据快速检索实现
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-26
抛出异常的爱 写道 dmewy 写道 抛出异常的爱 写道 Auckland 写道 抛出异常的爱 写道 天机老人 写道 机器只会有一台。不用考虑多台机器的事情!
公司要的就是价值最大化!不然这个活也不会交到我们手里了! 放文件里吧.... 不同的属性不同的文件夹. 规则成树状 大量的移动使用文件move 少量的移动把文件中对应的手机号删除新建. 看来看去还是觉得抛出异常的爱的建议不错。 其次,我觉得你的瓶颈不仅仅在数据库更新上。 最大难点在于规则方案少.... 检索慢...不过5分钟应该足够用了 dmewy 写道 数据库更新其实很好解决.
不知道你们有没有DataExchange的概念. 可以create一个新表去Insert. 等到晚上的时候再update回主表. 一秒100TPS一宿也update不了多少. 这个就简单了.首先你是用当天insert的哪张表去update所以不是3亿数据都UPDATE. 小表join大表去update. OK.不过我基本上都不用update.因为update是一条一条去做的. 没关系.还是很easy. 基本的做法是根据PK去delete然后再 addbatch insert. delete的时候用exist .这些都是小技巧了. 技巧很多很多. 比如insert的时候先drop index 全部insert以后再create index. 问题是楼主的需求他自己估计都搞不懂. PS:我本来是做web开发的,现在主要负责DataExchange的部分. 好办法... 可以使用批处理进行更新,但是要注意失误便捷不要划分的太大,否则占用大量回滚段资源,也会影响性能,另外,update语句的更新条件最好能减少使用等值,也有利于更新的速度 |
|
返回顶楼 | |
发表时间:2009-05-27
太感谢大家了,想不大家都如此热情!
特别是老抛同学真是太热心了。不知道说啥好呢! |
|
返回顶楼 | |
发表时间:2009-06-01
Lucene完全可以搞定,数据又不是很多,索引在update数据时实时更新度没问题的。直接用Hibernate Search或Compass吧,肯定能满足。
|
|
返回顶楼 | |
发表时间:2009-06-01
这个使用水平切分数据库可以达到目的,使用读写分离技术进一步提高性能。
一点建议: 这个应用业务相对于简单,可以自己写一个简单的dal层。 你可以对于切割数据库:对于手机号进行水平分割。 对于修改,和查询进行预编译,使之关联到各个table进行查询或修改。 不过可以尝试使用hibernate shards,应该更加方便一点。 |
|
返回顶楼 | |
发表时间:2009-06-01
土土的问:为什么不直接使用3亿条数据,置标志位的方式实现 300M*300字节=100G数据文件的直接访问。
|
|
返回顶楼 | |
发表时间:2009-06-01
天机老人 写道 按照我们的方案,大批量的查是没啥问题!但是大批量的更新非常成问题!
速度实在是难以想象!每更新一条就要开启关闭一次事物! 所以还是想听听大家的意见! 数据库无事务吧……应用程序做 |
|
返回顶楼 | |
发表时间:2009-06-01
我知道垃圾短信是哪来的了。。
|
|
返回顶楼 | |
发表时间:2009-06-02
楼主可以参考 防火墙,安全隐患策略类型软件的数据格式 用块状数据去存储 不一定要用数据库. 因为你有手机号码 所以你可以做到按手机号码排序 这样用文件去做更新是很快的 你想防火墙过滤规则的数据量是不会小的 但是为什么他们能做到这么快...
|
|
返回顶楼 | |
发表时间:2009-06-09
弱弱的问一下,大家说的分区,是逻辑上的还是物理上的啊。比如是把原来的一张表分区成多张表,还是加上一个条件(比如:地区为xx)多次查询啊?
|
|
返回顶楼 | |
发表时间:2009-06-17
我知道oracle可以按照日期进行分区,分区后速度很快。但不知道能不能按照手机号码进行分区?
|
|
返回顶楼 | |