移动社交网络中的数据库应用
熊明辉,张琳2*
作者简介:熊明辉,(1987-),男,硕士,移动终端互联网应用. E-mail: 095564@bupt.edu.cn
通信联系人:张琳,男,副教授。E-mail: zhanglin@bupt.edu.cn
(北京邮电大学信息与通信工程学院,北京 100876)
5 摘要:本文简单介绍了数据库在移动社交网络中的应用,结合实践,整合了关系型数据库
(MySQL)、嵌入式数据库SQLite、NoSQL 中的图形数据库Neo4j 以及可实现数据容器功能
的Hash-map 数据结构,分析了各自在移动SNS 数据持久化处理应用中的优势与不足,为移
动社交网络发展过程中大量数据的处理提出了多数据库融合使用的一种新思路。
关键词:移动社交网络;SQLite;MySQL;Hash-map;Neo4j;数据库
0 引言
25 社交网络—SNS,英文全称Social NetWorking Service,即社会网络服务,旨在建立社会
性的互联网络应用服务。其起源是基于哈佛大学的理学教授Stamley Milgram 创立的六度分
割理论[1]。按该理论引述,每个个体的社交圈可以不断放大而且相互交叉,最终必然形成一
个大型的网络—社会网络(Social NetWorking)。随着计算机网络技术的发展,在结合六度
空间理论的WEB2.0 技术的基础上,Facebook、Myspace、Twitter 等SNS 网站相继出现,并
30 迅速风靡全球。
1 国内社交网络的发展状况与趋势
随着21 世纪我国网络用户的迅猛递增,SNS 在国内的兴起犹如雨后春笋般纷纷涌现,
以交友为主的博客社区51.com、学生社区xiaonei.com[2] 为开端,先后涌现出开心网、豆瓣
网[2]、同学网、占座网以及QQ 空间等各大SNS 网络社区。
35 同时,国内移动通信领域发展飞速,手机用户过亿,通过手机访问互联网正在普及化,
移动通信与互联网二者的融合不可逆转。加之3G 时代的来临和移动信息传递速度的大幅度
提升,基于大容量数据传输的业务将得到更大的推动和发展,社交网络走出PC,走进移动
终端设备,将带来社交网络发展的黄金时代。
2 移动社交网中的数据关系
40 移动社交网络作为互联网社交网络的发展,同样是大量数据收集的载体,通过其主要的
业务功能应用—-个人注册,发表日志,上传照片音乐,交友,兴趣组讨论等,我们可以得
到最广泛的数据,以及复杂的数据关系[3]。
图1 数据结构与关系模型
Fig. 1 the structure of data 45 and the relation model
2.1 关系型数据库
移动SNS 主要采用客户机/服务器[4]模式,关系型数据库(本文以MySQL 为例)对于
网络中的数据及之间关系的存储和处理将发挥十分重要的作用。移动终端/服务器模式下,
50 数据收发的安全、高效是必要的考虑点。因此,合理地处理数据要优先考虑响应的效率和安
全问题(本文主要讨论数据库的选择优化,不涉及安全问题)。移动社交网络中[5],数据量
不仅庞大,而且结构多异,不仅需要处理结构化的数据,还要处理非结构化、半结构化数据。
使用关系型数据库MySQL[6],以数据模型建立多个表格,存储用户信息[7]、关系等内
容.
55 用户信息表:
表1 简单表格存储数据
Tab. 1 Storing the data in simple tables
Name Pro Sex Age Like
Jane student man 20 dog
Marry teacher female NULL NULL
Smith NULL NULL 19 NULL
A
userId friendId
Jane Smith
Smith Marry
…… ……
B
memberId
Jane
Marry
……
注:A 表65 示table_friends 朋友列表数据存储表,B 表示table_room 群组成员数据存储表
MySQL 快速而灵活,允许用户存储记录文件和图像,足以满足移动社交网络的信息管
理工作的各项需求。但是,对于稀疏矩阵数据(以table_user 表为例),value 为空的属性
项,MySQL 也需要开辟同样的内存来存储,不能有效的最优化内存。同时,对于网络数据
70 模型(3 部分中的好友操作)的操作,也显得不够灵活。
好友列表: table_friends 中,对用户进行好友推荐[8],这是主流SNS 中的常见操作处
理,以table_friends 为例,采用单向关系 提出好友请求者——>受好友邀请者 建立好友关
系表 table_friends,查询userId(Jane)的好友的好友进行推荐,SQL 语句如下:
---select distinct friendId from table_friends
75 where userId in (select friendId from table_friends where userId=Jane)
----select distinct userId from table_friends
where friendId in (select userId from table_friends where friendId=Jane)
由于采用了单向朋友关系存储好友,指定的Id 可能在userId 列中,也可能在friendId
列中,因此需要进行两次的查询才能完成好友推荐的操作。其间进行了多次的全表的遍历和
80 条件判断,尤其当需要根据好友关系权值(如两人之间某段时间的访问次数)来进行推荐时,
要进行多表间的连接遍历查询,操作繁琐,有较大的耗时。
2.2 NoSQL,数据库----Neo4j
关系型数据库MySQL,使用结构化查询语言SQL,多表连接等操作,方便用户使用。
但是在半结构化、网络图形数据关系、稀疏表存取处理上还是有很大的不足。
85
图2 Neo4j 的简单结构
Fig. 2 the simple structure of Neo4j
NoSQL 是非关系型数据存储的广义定义,其存储不需要固定格式的表结构,不存在类
似连接多表的操作,在超大型数据存取上具备有关系型数据库无法比拟的性能优势。Neo4j[9]
90 作为NoSQL 中的一员,是一个用JAVA 实现、完全兼容ACID 的图形数据库,数据以一种
针对图形网络进行过优化的格式保存在磁盘上。Neo4j 的基元是节点(nodes)、关系
(relationships)、属性(properties),通过这三个基元可以完整的描述任意一个用户的所
有情况,包括数据属性及与其他数据的关系。在关系(relationships)上赋予属性,作为其
权值,可以灵活扩展其网络模型;对于节点(nodes)的属性,可以随时地增删,从而有效地
95 解决了对于半结构化、非结构化、稀疏表的存储中浪费内存的问题,其独有的深度(deep)
遍历接口,可以快速找到不同关系关联下的任意深度节点。
以近百万级的数据集[10]为例,测试Neo4j 的性能优势:
该数据集有节点: 265214 关系边: 420045,以0——>1 表示节点0,1 之间存在关系。
分别将数据集导入MySQL 和Neo4j 中形成数据表格和网络数据模型如下:
100
表2 关系表与非关系的网络模型
Tab. 2 In MySQL a single table(a), In Neo4j the graph edges[10](b)
a b
105
110
115 导入数据库后,分别对两者进行深度遍历(等同于查找好友的好友……)------
MySQL------
SELECT distinct a.inV FROM graph as a WHERE a.outV=? -------------DEPTH=1
SELECT distinct b.inV FROM graph as a, graph as b WHERE a.inV=b.outV AND
a.outV=?------DEPTH=2
120 SELECT distinct c.inV FROM graph as a, graph as b, graph as c WHERE a.inV=b.outV
AND b.inV=c.outV AND a.outV=? ------------ DEPTH=3
SELECT distinct d.inV FROM graph as a, graph as b, graph as c, graph as d WHERE
a.inV=b.outV AND b.inV=c.outV AND c.inV=d.outV AND a.outV=?------------DEPTH=4
SELECT distinct e.inV FROM graph as a, graph as b, graph as c, graph as d, graph as e
125 WHERE a.inV=b.outV AND b.inV=c.outV AND c.inV=d.outV AND d.inV=e.outV AND
a.outV=?
---DEPTH=5
Neo4j---------
Traverser friendsTraverser=node.traverse (
130 Traverser.Order.BREADTH_FIRST,
new StopEvaluator () {
int d= tp.depth();
If (d<steps) return false;
else 135 return true ;}
},
new ReturnableEvaluator () {
public boolean isReturnableNode (TraversalPostion tp) {
if (tp.depth() = =steps)
140 return true;
else return false;}
},
MyRelationshipTypes.KNOWS, Direction.OUTGOING);
截取0-250 这250 个节点进行测试研究,得到的结果:
145
表3 Neo4j 与MySQL 测试结果对比
Tab. 3 Comparing with the two test results
Neo4j Depth 用时/ms 返回节点数 节点/ms
1 172 1219 7.087
2 235 2741 11.664
3 375 6307 16.819
4 650 13014 20.022
5 1171 24346 20.791
MySQL Depth 用时/ms 返回节点数 节点/ms
1 24579 1219 0.045
2 94030 2741 0.029
3 166311 6307 0.038
4 242325 13014 0.054
5 293312 24346 0.083
150 我们可以看到,对于大型数据集来说,Neo4j 有着关系数据库无法比拟的优势:遍历速
度快,结构简单,可优化存储半结构化、非结构化的网络图形数据,节约内存,同时可对网
络进行复杂的操作,代码简单,灵活性大,可扩展性强。
2.3 SQLite
SQLite 是一款轻型数据库[11],提出一种跨平台,支持内存的数据库嵌入式解决方案。
155 它以单一数据文件形式存储数据,只需要几百K 的内存就可拥有几百M 的MySQL 的大部
分功能,而且SQLite 比MySQL 等大型数据库的运行速度更快,这对于像手机终端这种对
内存要求极高的移动设备来说是十分适合的。目前在诸如Andriod[12]、Windows Moble、
Symbian[13]、Palm 等知名手机操作系统中都有对SQLite 的支持。
在移动社交网络中,无论在服务端还是客户移动终端,SQLite 都能高效的处理、存储
160 数据——在终端,把SQLite 作为数据容器可疑充分发挥SQLite 单一数据文件的优点,避免
自己定义数据文件格式和存取的麻烦,有效地提高了运行效率,节省内存,精简代码。假设
注册/登陆操作相应的数据为{用户名,密码}。
方法一:特殊数据格式处理。创建数据格式,以JSON 为例,{用户名:admin;密码:
admin;}则可方便的通过JSON 格式的get()方法获取用户名、密码等信息,再将JSON 数据
165 以文件方式存储持久化。
方法二:文件处理。从文件中读取数据,获得数据字符串,按约定规则使用正则表达式
解析字符串,例如以空格分隔开字符串“admin admin",分别获得了用户名和密码等信息。
方法三:SQLite 数据库处理。虽然使用数据库有连接数据库的时间消耗,但是文件操
作同样有文件打开读写的时间,数据格式有创建和处理的麻烦,SQLite 直接提取、存储需
170 要的数据属性,不用创建数据格式或解析处理,大大简便了操作的烦琐,也节约了内存。
随着移动终端操作系统的发展,更多的数据处理、存储将会移至终端设备,SQLite 将
会处理更多更复杂的数据,减轻服务端的负载,缩短请求——响应的间隔。
2.4 Hash-map
Hash-map 作为实现java.util.Map 接口的实现类,实现了按“键-值”对进行快速存取,
175 与关系型数据库模型表中的“字段-属性”关系有着类似的功能。由于这种特性,开辟一个
学术论文网Tag:代写论文 论文发表 计算机论文 代写毕业设计 代发论文 信息系统论文
|