日期:2014-05-17  浏览次数:21001 次

c#处理上百万上千万条数据的方法(面试题目)
  最近面试经常会问,碰到上百万上千万条数据时如何优化性能方面的。不让数据出现错误。比如同时操作一些数据之类的。越详细越好。有案例更好。

------解决方案--------------------
你先问问他,你们是怎么考虑的,我告诉你们瓶颈在哪里。
------解决方案--------------------
我有时也会问面试者这样的问题,其实主要是想看看对方的思路以及应变能力,如果碰上真有相关经验的也可以考察下总结的能力。。  
------解决方案--------------------
我也没有很多处理大量数据的经验,只是处理过一些gps数据,每个月大概一千万数据。
我的做法是在数据库建立作业,每天将数据自动放到另一个表去,这样查询当天数据就很快了。然后也有一个作业是每月自动将这个月的数据转移到一个新表去。
另外,建立索引可以对查询速度起到很大帮助。
------解决方案--------------------
我毫不客气地说,csdn上90%(或者更高比例)讨论海量数据的人,根本连讨论这个话题的资格都还没有。他们讨论的不过是一个蹩脚的DBA的技巧,或者是一些自创的,甚至道听途说根本就是错误的山寨方法。这就好比所谓硬件论坛讨论的却是一些如何装机,CPU超频之类的问题,或者所谓虚拟化论坛讨论的是如何配置虚拟机之类的话题。

在这个层次上讨论来讨论去没有任何有价值的,有建设性的观点,只能是在不断排列组合那些偏见和谬论而已。不要以为自己做一个二踢脚就非要证明火箭的意义。
------解决方案--------------------
有关海量数据库的问题,还有一个关键点就是对数据库的清理工作,有的地方把这项技术叫做“数据卸载”,我觉得称作“失效数据剥离”更合适些,就如上面有人提到,某些企业日积月累的数据量达到了数千万条,而实际常用的记录却很少(这种现象很普遍),SAP的软件有这种功能,国内的用友之流直接搞一个按年结算,跨年就歇菜

而要实现数据卸载,就必须有能力知道数据是否已经失效了。对于失效的数据要及时移动到失效数据库中,以保证运行数据库的高效运转,而失效数据库仍让应该可以通过某种途径查询及分析历史数据。

另外我上面贴的“异步讨论”连接错了,补一个。
http://blog.sina.com.cn/s/blog_72ed17450100tx2l.html

有个有趣的现象是,年轻人有些非常自卑,觉得自己啥都不行,都要别人干才行,而有些人有太自大,别人啥都不会干,就陪扫垃圾,其实俺觉得如果从禅宗角度考虑,其时众生是平等的,以平常心看平常事,就当小学生问问题,也好耐心回答嘛。

其实公司面试的这个问题,虽说有些大,但至少算是个实际问题,说明他们碰到难题了。如果有些HR从题库里搞些莫名其妙的“算法”给你,反正我会很不爽。(记得93年我刚工作时,公司HR就遇到这么一位,提了几个自己觉得很牛的书本问题给一个很有经验的通信工程师,想镇一下。人家扭头就走了,拦都拦不住,而工程部的人都知道她有本事)。
------解决方案--------------------
引用:
事实证明,公司不拿出百万以上的年薪,到处找人问百万数据怎么处理是没有谱的。

回答这种面试题有一个很好的办法,就是任何技术不能超越物理规律。Google有再优秀的程序员也拥有数量最多的服务器。

确实是这样,系统性能优化是个高级技术活,让新手做多半会越调越砸的。
------解决方案--------------------
这个要根据具体业务具体分析, 很难一概而论.

如果数据是结构化的, 或者业务逻辑比较复杂关系紧密, 一致性要求较高 可使用传统关系型数据库

反之(大多数的web通用站点)可以使用文档型数据库或key-value数据库, 优点在于极高的读写性能.
------解决方案--------------------
引用:
这多的回答就没有一个答案的。难道这个东西就只能高技术的人会吗?还有如果是这样的那怎么会有那么多的公司问我这个问题。我面试的公司里最少有4家问了这个问题。而我只从数据库上随便说了些。自己都不知道对不对的。所以就在csnd上发了这个帖子。希望高手能够帮我回答一下。这样我至少不会一下子 就被面试官问倒。

    没有金刚钻还是不要揽瓷器活的好,即使面试时靠背书的水平骗了个职位,真让你调优,把人家的代码搞砸了,还不如别做的,即使没搞砸,系统调优的工作量非常大,天天忙都忙死你,就甭提什么享受生活了。
    另外,从你问问题的态度看,你不适于团队合作,谁也没欠你什么,反问那么多东西是什么?抱怨生活吗?做个乐观主义者不好吗,非要要求别人什么都给你干了就高兴了吗?
    如果有公司再提这个问题,你大可说这是系统调优的活,额干不了,额稀饭做代码民工的活,不过我要拿专家的工资。
------解决方案--------------------
本帖最后由 caozhy 于 2012-03-31 11:00:52 编辑
引用:
引用:
这多的回答就没有一个答案的。难道这个东西就只能高技术的人会吗?还有如果是这样的那怎么会有那么多的公司问我这个问题。我面试的公司里最少有4家问了这个问题。而我只从数据库上随便说了些。自己都不知道对不对的。所以就在csnd上发了这个帖子。希望高手能够帮我回答一下。这样我至少不会一下子 就被面试官问倒。

    没有金刚钻还是不要揽瓷器活的好,即使面试时靠背书的水平……


背书一看就露馅了,这不是背课文,多几个字少几个字的问题。
比如某帖(具体就不说了,怕伤人家自尊)回答委托的作用,他是这么回答的,“委托是安全的对象”。或许他背的是“委托是类型安全的指针”,类型安全和指针又不理解,再复述出来就根本驴头不对马嘴了。如果我要是面试官,再问问什么是“安全的对象”,什么是“不安全的对象”,保管那人就露馅。同样的道理,可能有的人可以突击背诵一些什么“乐观锁”、“悲观锁”之类的东西,除非面试的人自己也是糊涂蛋,否则我稍微问下去,你还是得马上露馅。那怎么样才能不露馅呢?那就得系统的学一遍,有相关的工作经验——可是这对投机取巧的人来说,不就是废话吗?