数据引发的思考、实践
2013-10-25 23:40
459 查看
_由2000W多条开房数据引发的思考、实践----给在校生的一个真实【练耙场】,同学们,来开始一次伟大的尝试吧。
缘起---闲逛博客园
前几天的时候,在某一QQ群看到一条消息“XXX酒店开房XXXBTXX迅雷BT下载”,当时是一目十行的心态浏览,目光掠过时,第一反应时我邪恶了~以为是XX种子(你懂的~),所以并不感兴趣,呵呵.... 直到又回到博客园逛时,看到一篇最多评论的文章:看看多线程的效率有多差劲! - 张浩华 - 博客园
http://www.cnblogs.com/zhhh/p/3385751.html
于是点击进去了。这时,我才回想起来,当时是自己邪恶想多了...... 原来是2000w条开房数据记录的数据库,浏览了文章后,我表示对这2000w感兴趣了!于是,就催生了此文。
结缘---搜索引擎来牵线
看了上面提到的那文章,我决定也要玩一玩,不过那园友有点儿“懒”了,没有提供数据库以及Demo下载。好吧,这时候我们要发挥搜索本领了,几经搜索,最后是Google帮上的忙(百度搜索到的链接很多都已经被和谐了~)。 (温馨提示:近来上级严查水表,各位传播东西需小心~)。一个小时过去了,1.7GB的压缩文件终于下载完成:
小巫见大巫
面对这千万条数据级别的数据库文件,先来看一看我的本机配置信息:View Code
可以看得出作者很懒,除了主键id,其它字段一律用 nvarchar,长度4000应付,其实看到这里的时候,我有点怀疑这些数据的真实性(是否随意生成)的。
nvarchar(n) 变长 处理unicode数据类型(所有的字符使用两个字节表示) n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零
验证数据真实性(希望更多朋友提供准确的方式)
带着疑问出发,我用了这个语句来查询:
select * from dbo.cdsgus where Address like 'XX省XXx市XX镇XX村%' --X代表地点名称
呵呵,还真找到了几个熟悉的小伙伴,尚且当它是真的吧。又或者原数据库被人加工、整理过之后,随便建立了一个表保存起来的之后再备份出来放在网上的。
(我就纳闷了,整个备份文件还原之后仅只有一个表~)
说回正题,我们再看看:
Name Owner Type Created_datetime cdsgus dbo user table
作者是夜猫子,看一看创建日期:2013-05-23 04:02:21.120。
ID自动增涨列:
Identity Seed Increment Not For Replication id 1 1 0
index_name index_description index_keys Index_Birthday nonclustered located on PRIMARY Birthday Index_ByAddress nonclustered located on PRIMARY Address Index_ByName nonclustered located on PRIMARY Name PK_cdsgus clustered, unique, primary key located on PRIMARY id
原本只有id默认主键索引,Name,Address,Birthday是我后来加上的。
constraint_type constraint_name delete_action update_action status_enabled PRIMARY KEY (clustered) PK_cdsgus (n/a) (n/a) (n/a) (n/a) id
ok!表字段结构我们看完了,尽管这这个数据库只有一个表,表中只设置了一个id主键。但从结果显示中,
我们可以看出,其实有几个字段是作外键使用的,
如下图中的:District1--6,family,id等。
既然了了外键,那么应该还有其它的数据表,希望哪位可以提供上来,呵呵。
天马行空---数据挖掘、分析、利用
数据有了,除了用来练习几个select 语句还能有什么用呢?这个时候,该发挥我们的天马行空思想了,看一看,想一想里面都有什么了?
由于里面的数据有其真实性,且有了身份证号码,邮箱地址,手机号码......嘿嘿,想到了吧?不要用来做坏事哦!
骗子们得到数据后,可能会用来群发敲诈短信;
广告诉们可能会用来传广告;
数据挖掘专家可能会用来了解各地入口入住人数,年龄阶段,分布时间范围等。
......
我们也来学着分析一下,(在园子里的应该都接触过sql语句,下面直接取样分析)
地区分布:(以北,上,广为例)
select count(*) as '北京' from dbo.cdsgus where Address like '北京%' select count(*) as '上海' from dbo.cdsgus where Address like '上海%' select count(*) as '广东' from dbo.cdsgus where Address like '广东%'
结论:留给大家思考......
年龄分布:
select count(*) as '00后' from dbo.cdsgus where Birthday like '20%' select count(*) as '1990后' from dbo.cdsgus where Birthday like '199%' select count(*) as '1980后' from dbo.cdsgus where Birthday like '198%' select count(*) as '1970后' from dbo.cdsgus where Birthday like '197%' select count(*) as '1960后' from dbo.cdsgus where Birthday like '196%' select count(*) as '1950后' from dbo.cdsgus where Birthday like '195%' select count(*) as '1940后' from dbo.cdsgus where Birthday like '194%' select count(*) as '1930后' from dbo.cdsgus where Birthday like '193%' select count(*) as '1920后' from dbo.cdsgus where Birthday like '192%' select count(*) as '1910后' from dbo.cdsgus where Birthday like '191%' select count(*) as '1900后' from dbo.cdsgus where Birthday like '190%' select count(*) as '1800后' from dbo.cdsgus where Birthday like '180%'
结果:80后作为主力军,你是否在其中呢?
类似的模糊查询,大家可以灵活变通,如查询客户是移动的用户还是联通的多(根据手机号码前N位),邮箱后缀名等。
建议
查询示例到此告一段落,现在网上也有不少人把这数据库作为数据源,可以通过Web页面进行查询了,
但我用了几个都很不理想,速度慢得可怜,有时候真怀疑他有没有建立相应的索引了,最大的局限性是:仅能通过身份证,姓名去查。
对于作为程序员的你,你接受这样的低权限吗?
所以,建议大家有空还是应该找到这文件,在本地测试,推荐给所有在校生,可以用来练习一下多数据查询,优化问题。
当然,如果哪位朋友有资源的话,建立一个Web页面,可以直接输入sql命令来查询的那就更好了。
最后来一张关于数据价值转化的图:
我们现在得到数据库了,直接到达了加工车间这一层,至于怎样去发掘,那就要看你们的创意了。
总结
自从在学校交了210元的费用考了个所谓的的数据库工程师资格证(学校要求必须要考,但没什么技术含量),之后比较少接触SqlServer数据库了,转眼,10月底了,再过一段时间就要准备实习了,目前还是在校生。
这次藉由这个2000w来温习了一下相关的基础知识,
磁盘IO性能问题,数据备份,恢复,索引,模糊查询,函数调用,大数据分析,挖掘,利用等。
抛砖引玉---期待亮点评论
此文,仅仅代表一个在校生初试2000w条记录的数据库的浅显实践,泛泛而谈,个中的结论,推断难免轻浮、果断。不足之处,还望各位资深读者多多指导,斧正本文的错误论点。
libcef 学习资源
libcef是直接基于chromium的content api开发的嵌入式框架,便于将chromium集成到自己的应用程序里。初步学习libcef会有框架负担成本的,首先要先大致理解下chromium本身的构架设计,基本概念和模型,其次要学习cef本身的框架和概念,接着通过测试libcef的demo达到对cef类间组织关系的理解。依次给出这几个步骤需要的资源和链接:
1、chromium框架设计,基本上需要把chromium设计文档页面上的每个连接都过1-2遍。
设计文档主要包括:多进程构架、进程间通信、多线程模型、chromium分层构架,UI构架。 http://www.chromium.org/developers/design-documents/
2、看完英文的也可以适当看下中文的各种翻译版:
-「chromium源码剖析」,这个链接应该是原创的,上面的图都裂了: http://www.cnblogs.com/duguguiyu/archive/2008/10/02/1303095.html
-「chromium源码剖析」的pdf档: http://ishare.iask.sina.com.cn/download/explain.php?fileid=61635648
-「理解WebKit和Chromium」,图灵社区的电子书,基本上只是翻译之作: http://www.ituring.com.cn/minibook/705
其实重点理解的也就是多进程构架、进程间通信、多线程模型、分层构架、UI构架等。
3、理解了chromium之后,就可以开始接触libcef项目,首先是libcef项目本身的自我介绍: https://code.google.com/p/chromiumembedded/ 这个页面除了简要介绍libcef项目的定位外,还有libcef的.NET、Delphi、Java、Python移植项目的链接,感兴趣的也看之。
4、当然,接着你需要看libcef的项目文档,最主要的是这个: https://code.google.com/p/chromiumembedded/wiki/GeneralUsage 基本上,最重要的也是理解libcef的多进程、多线程、启动流程、最重要的几个类等。
光看文档是不够的,需要通过阅读和修改demo项目来反馈理解,下载binary包: http://www.magpcss.net/cef_downloads/ 通过cefclient项目来初步理解libcef的用法,重点理解CefApp、CefClient、CefBrowser、CefFrame以及各种Handler之间的关系。
5、通过上述折腾,你应该对libcef有个大概的了解,不过对整体框架还是模模糊糊的状态,没关系,继续折腾。
- 「基于.net开发chrome核心浏览器系列」如果你对.NET比较熟悉的话,可以通过这几个链接上的libcef的.NET封装的使用来加深对cef的理解: http://www.cnblogs.com/liulun/archive/2013/03/18/2874276.html
- 「Chromium之cef3的.net封装」,其实内容都差不多,只是为了通过重复看demo理解cef的套路。 http://www.cnblogs.com/Sham-poo7/archive/2013/02/12/2910199.html
6、在上述过程之后,你应该大致理解了libcef的几个主要的类用法以及之间的关系。但你可能需要对libcef的各种类有更清晰的了解,这个时候直接去看libcef源码目录下的include文件夹,这里面的所有.h文件都有对类和方法给出详细的注释,这是最佳文档,建议通读。
7、忘记告诉你了,libcef有个自己的论坛。
论坛上很重要的一个页面是FAQ页面,这个应该也是必读的: http://magpcss.org/ceforum/viewtopic.php?f=6&t=10567
这个子版块是libcef的讨论版: http://magpcss.org/ceforum/viewforum.php?f=10
接下去可以去深入libcef的源码,了解libcef的内部机制,不过再继续下去可能需要对chromium本身的源码有一定的理解,如果打算长期跟踪的话,可以继续下去,并且吃掉libcef之后接着去搞更大的chromium这个怪物。
相关文章推荐
- 由2000W多条开房数据引发的思考、实践 --IO
- 【数据库】_由2000W多条开房数据引发的思考、实践----给在校生的一个真实【练耙场】,同学们,来开始一次伟大的尝试吧。
- 由对BLOB数据的操作所引发的一系列思考
- 独家视频 | 新时代数据人才=基础+实践+独立思考能力
- 由博客评论引发的思考和实践(关于搜狗输入法)
- 补卡的糟糕经历引发的思考:一点黑客技术让我们不再泄露那么多数据
- Java模拟链表操作引发对Java传引用的思考实践
- CSDN泄露数据引发的思考
- 大数据实践总结---一点思考
- 一个数据交换函数引发的思考
- EDW on Hadoop(Hadoop上的数据仓库)技术选型和实践思考
- 一道面试题引发的对数据类型转换的思考
- ElasticStack系列之十一 & 同步 mysql 数据的实践与思考
- 图像数据类型引发的思考
- 大数据Spark “蘑菇云”行动第77课:Spark Streaming性能调优思考和实践方法,发现磁盘空间没有了,怎么办
- 《前端们,贺老 Live 面试你了!》所引发的思考与实践
- 【工业大数据】张洁教授现场剖析制造业大数据制造的思考与实践
- 由一次数据恢复的经历,引发我对“数据安全”的思考
- 由【JAVA中参数传递问题】引发除了基本数据类型和引用类型的思考
- MySQL-Front 建表引发的一点小思考(数据表格模版)