QQ群关系库查询解决方案(下)

本文由习科论坛会员gcz1992供稿,给大家提供技术参考和学习,欠缺的地方希望大家指出,文章分上下两篇,上篇已于前几日发布,这是下篇。

 

一个报告写了这么长时间也算奇葩了,嗯,终于有空写文章了,拖到了现在,这期间我试用了MySQL ,Oracle和Nosql中的Couchbase,事实上都没有MSSQL来的干脆,因为数据的导入导出过程实在太慢了,慢到俺这渣机受不了。

 

 

不过在我的试用过程中,MySQL在小数据量的时候有很强大的优势,短小而精悍,用起来十分舒服,在全部导入的情况下,与MSSQL速度比起来虽然 会有些慢,但在建立好索引的情况下,也是可以使用的,没有索引就没有速度。索引就是一个数据查询的灵魂。

 

QQ群关系库MSSQL到Mysql 的 数据导入

我进行了从MSSQL到 Mysql 的数据转入测试。
(1)推荐使用工具MySQL Migration Toolkit,工具很容易上手,但在Source Database 处和set parameter时要指定数据连接类型, 即加上“charset=utf8”,网上有很多这样的资料大家可以直接百度。另外转换的时间会很长,大家可以用一个表来测试一下速度。

改换完成后效果图如下:

 

 

(2)   第二种方法就是自己写一个转换工具,因为数据结构并不复杂。
将数据一条一条来读,然后插入就可以了,而且这种方法同样适用于Oracle等数据库,虽然它也会很慢。

我的导入就是自己写的只是数据太大了,以至于电脑会卡死,后来又写了事务加插入判断才算让它可以好好干活。

工具以及源码春节后我会放到习科论坛,大家可以关注一下。

 

QQ库数据结构整体优化

已知这个库中Group Data库是其中的关键,因为它保存了用户的昵称,年龄,性别等信息。结构如下:

 

 

而这个结构事实上又是以QunNum 来进行的存储,以方便群内成员的查询。

 

 

如果我们反其道而行呢?将数据结构进行改变,以QQNum 来进行结构存储,而后划分区段是不是就可以更好的优化查询速度呢?

其实就是对整个库进行一个以QQNum 的一个ASC排序 ,从10000开始一直到库内最大的QQ的一个排序。部分效果如下:

 

 

那么如何进行这个排序呢?

先建立新的数据库,以ASC顺序来建立表,然后对数据进行判断,划分存储表与存储位置,随后插入数据。这个也可以用存储过程来干,只不过同样是很漫长的一件事,而且对硬盘空间是一个大考验,当然服务器就很轻松了。

我只进行了很少部分的转换,就如上图,效果就是查本人的渣机会比神机还要快,虽然我的硬盘已经红到爆了。

完整存储过程我也会在年后放到习科论坛,大家多多关注。

 

NoSQL笔记

这段时间学了点NoSQL,现在分享给大家。

个人认为这个数据库的兴起是一种必然,关系型数据库的应用在大数据时代出现了很大的弊端,所以众多Nosql数据库才会有兴起。

起源时间:“NoSQL”一词,源于 2009 年 6 月 11 日在旧金山举行的一场技术聚会(meetup)。

定义:如果说要一个定义的话,我理解为“开源分布式的非关系型数据库”。

 

NoSQL开发原因始于大数据时代的到来,Web技术的进步让我们这个时代的网站的数据量急剧增加,于是就要应用到集群,而关系型数据库无法在集群中高效运行。

原因如下:

(1)关系型数据库开发时就不是设计给集群用的。 Oracle RAC 或 Microsoft SQL Server 在集群上使用会使部分功能无法使用,如事务,一致性等,而且查询效率会变低。

(2)更坑爹的就是许可费,。商用的关系型数据库通常按单台服务器计费,所以在集群中使用会非常贵。(对于这一点要说明,NoSQL的众多成员都是开源的,这也是它的优点与特征之一。)

(3)关系型数据库的迁移很麻烦,比如我们现在的QQ库。

所以就促使了创新,促使了NoSQL的开发, 各种 NoSQL 数据库的共同特性是:

■ 不使用关系模型

■ 在集群中运行良好

■ 开源

■ 适用于 21 世纪的互联网公司

■ 无模式

用直白的话说的话就是,支持大数据,支持集群,省钱,速度还快,而且比关系型数据库还要安全一些,这也是我认为它会在以后越来越火的原因。

它最大的特征就是:NoSQL 数据库不使用 SQL,即结构化查询语言。

PS:  一旦想到SQL,我就想到了注入,如果不使用SQL,那么注入攻击是不是也就不复杂存在了呢?究竟是不是呢?
Nosql的种类。

主要包括:键值数据库 文档数据库 列族数据库  图数据库

键值数据库:存放会话信息,用户配置信息,购物车数据等;

文档数据库:事件记录,内容管理系统及博客平台,网站分析与实时分析,电子商务应用程序等;

列族数据库(大表格式数据模型):事件记录,内容管理系统与博客平台,计数器,限期使用等;

图数据库:互联数据,安排运输路线、分派货物和基于位置的服务,搜索引擎,推荐引擎等。
Nosql实例

为了更直观的了解NoSQL,小菜就自己搭建了一个 键值数据库,来分享下心得。

数据库:Couchbase

类型:键值数据库

版本:2.2.0-821-rel

搭建完成后效果图:

 

 

这个NoSQL数据库使用 Web 8091 端口 作为控制台,很方便。

下面显示键值数据库:

 

 

库内储存的值:

值内的内容:

 

 

从上面的例子中我们可以看出,它并没关系数据库所谓的表结构,而是直接存储的key值,而且存储中的东西很多,这种存储在 <NoSQL精粹> 一书中被称为聚合,没有固定的内容格式,这就是所谓的无模式。将数据的节点数降到最低,更加适合集群的使用。

如果说关系数据库的存储时一个表的数据是一个人的部分属性,多个表组成一个人的话,那么Nosql就更像是一次把一个人保存进去,包括这个人的身高属性等等存在同一个key内,数据比之关系型数据库更加独立化。

下面我们来进行一个程序控制Couchbase 的实例,源码如下:

  1. namespace MemBaseApp
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. //配置服务器
  8. var mbcc = new CouchbaseClientConfiguration();
  9. //设置各种超时时间
  10. mbcc.SocketPool.ReceiveTimeout = new TimeSpan(0, 0, 2);
  11. mbcc.SocketPool.ConnectionTimeout = new TimeSpan(0, 0, 4);
  12. mbcc.SocketPool.DeadTimeout = new TimeSpan(0, 0, 10);
  13. //使用默认的数据库
  14. mbcc.Urls.Add(new Uri(“http://127.0.0.1:8091/pools/default”));
  15. //建立一个Client,装入Client的配置
  16. var client = new CouchbaseClient(mbcc);
  17. //添加一条数据
  18. var item = client.Cas(StoreMode.Add, “new1”, “Hello World! I am guoker,i am 1,测试文字”);
  19. var item2 = client.Cas(StoreMode.Add, “new2”, “Hello World! I am guoker,i am 2”);
  20. var item3 = client.Cas(StoreMode.Add, “new3”, “Hello World! I am guoker,i am 3”);
  21. //获取刚添加的数据
  22. Console.WriteLine(client.Get(“new1”));
  23. Console.WriteLine(“完成!”);
  24. Console.ReadLine();
  25. }
  26. }
  27. }

运行效果:

 

 

大家可以看到源码里面完全没有SQL语句,只是调用了数据库提供的dll,就完成了插入与读取的功能,这也说明了NoSQL 确实无法像原来关系数据库那样用 结构化查询语言 进行注入。

 

NoSQL真的无法注入吗?

没结构化查询语言就无法注入吗?不,凡事没有绝对,前几天翻墙时就找到了一些相关的资料,通过程序所使用程序语言来对NoSQL的一些注入,javaScript、php、.net、java等语言因为可以直接对数据的调用而成为新的注入语言。

世上没有完美的程序语言,总会有虫子的存在,就像有光,就会有阴影。注入安全必将永远存在于数据库的首要安全行列。

 

NoSQL的其它缺点与前景:

本人测试漏洞:因为依旧拥有登录功能,弱口令与端口爆破依旧会存在。

现在的NoSQL 还没有一个统一的标准,鱼龙混杂,而且各类太多,在使用上还有很多未知BUG,而且应用还是很少,所以关系型数据库依旧占有很大的市场,它就像个未成年的孩子一样等待人们的开发和更新维护,不过我相信随着大数据时代的进步,它总有一天会长大的。

 

大数据时代

甲:喂,前两天你去上海了?
乙:嗯,你怎么知道的?
甲:你说说不是有定位吗?
乙:靠,那我老婆不是也知道了。
甲:你不会。。。

上面的对话中的事大概在现在生活中并不少见,我们的隐私不知不觉中就会被泄露,不管你想不想被人知道。

在大数据时代,人们的一举一动都被互联网所监控,除非你是一个与世隔绝的野人,否则就不可能不被监控,至于那些信息被谁所拥有,它是否该拥有,被用来干嘛,我们一无所知。。。

我们是可悲的,也是幸运的,我们幸运的出生在了足不出户观天下,千里传音的时代,拥有着历史上从未出现过的文明盛世,又可悲的丢掉了所有的隐私。

信息安全的保护重于泰山,而大多的人们还不太明白这一道理,这也许会造成很多的悲剧,几乎可以预见。

在一部电影《网络末日战》中,黑客掌握了可怜受害者的几乎所有信息,银行卡,身份证件,学籍,户口,甚至知道他女儿的信息,以至于他只能接受黑客的所有安排,听从黑客指挥,这也许就是数据被恶意使用的实例。

为了数据的安全我们可以做什么呢?

数据正在被各种泄露,每天,每夜,每分钟。。。设想一下,腾讯的数据库如果可以任意查看(不是没有可能,支付宝都泄了,何况腾讯呢。),每个人的QQ,姓名,电话,住址,常用网站,出行日志,性格,心情等等,anything,都被记录下来的话,是不是就可以预测出这个人未来几天的事呢?

我们通过心情与日志的分析,得知行程,分析IP得知现住地,电话,聊天记录与密码分析,得到他的常用密码,是不是就和上面一样可以控制这个人呢?不听话就把他钱全转到红十字会啊,有木有,太邪恶了。

而这次QQ群数据的泄露,如此简单,让人不得不对现在的网络心寒。

更别提以前那些多少万,千万的数据了,不是黑客们太聪明,是大家对数据的太不重视了,以至于,这些信息的外泄。

其实大数据有很多用处的,以庞大的数据作为支撑,我们就可以预测出很多未来,甚至可以用来建造一个世界也说不定呢。

如果我们掌握足够多的信息,里面包含了地图,天气,新闻,身份,性格,财富,然后以某种规律运行,是不是就可以虚拟一个世界?是不是就可以预知未来呢?再如果,我们先是足够的物理支持,我们能不能建造一个属于自己的世界呢?

也许是我想多了,可是谁又知道我们是不是NPC,在玩地球on line呢。。。这个世界难道不像一个游戏吗?各种规则,力学,元素周期表等等都表明了我们在一个已经规定好了的空间中生存。好无聊啊。

自从一个外国人看了中国易经,造成电脑后,世界都因此翻天覆地了,我们懂了好多东西,也许电脑就是我们打开未来的钥匙,只用程序员能找到规律,改变世界吧,哈哈,最近看电影看多了,欢迎大家吐嘈。。。

 

最后祝大家马年大吉,新春快乐,请大家关注网络安全,关注大数据,关注习科。by:guoker

//Silic.Org

发表评论

电子邮件地址不会被公开。 必填项已用*标注