数据库设计 倪莹莹 201430310020_第1页
数据库设计 倪莹莹 201430310020_第2页
数据库设计 倪莹莹 201430310020_第3页
数据库设计 倪莹莹 201430310020_第4页
数据库设计 倪莹莹 201430310020_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、上海海事大学SHANGHAI MARITIME UNIVERSITY数据库实现技术课程报告题 目:即时通讯聊天记录数据库设计 专 业: 计算机技术 年 级: 2014 学 号: 201430310020 姓 名: 倪莹莹 信息工程学院 2015 年5 月30 日目录1 选题31.1选题题目31.2 小组成员32 数据库管理系统设计目标32.1应用范围32.2需求分析33文件的组织结构(元数据的存储)33.1 数据的存储方式33.2 数据的存储内容43.3 存储原理图43.4 聊天记录的存储44查询优化54.1举例54.2 查询聊天记录的过程54.3 优化65多用户设计65.1 事务65.2 锁

2、75.3 多用户并发控制76问题及体会86.1 问题86.2 体会91 选题1.1选题题目即时通讯聊天记录数据库设计1.2 小组成员学号姓名职责201430310020倪莹莹完成聊天记录数据库的整体设计2 数据库管理系统设计目标2.1应用范围本课题在结合行业自身的特点的同时,也充分考虑到设计者自身的条件与现有技术成熟度的基础上做出了一款适合大多数人使用的数据库,它可以作为公司内部的聊天系统来使用,这样安全高效。2.2需求分析文件分类:文本图片文件聊天记录数据库主要包含两大部分:存储和查询。存储就包括文件的存储方式和数据结构等。查询聊天记录这一块要实现两个功能:1.实现私聊和群聊的聊天记录的查询

3、;2.实现文本,图片和文件的单独查询。具体的结构如下:存储入口(索引)数据库需求时间结构查询对象3文件的组织结构(元数据的存储)3.1 数据的存储方式由于数据量庞大,所有数据的存储采用顺序存储方式,按照日期每天在数据库中新建一个表用来存储这些信息。3.2 数据的存储内容聊天记录包括发送人、接受人、发送时间以及发送内容等字段。按照时间每天系统新建一个表格用来存放每天的聊天记录。设计的表格如下:字段数据类型可空主键外键说明IdInt否是否信息记录的唯一标识,自增SenderIdInt否否否用户标识ReceiverIdInt否否是接受者标识(个人或者群组)GroupchatChar(1)否否否判断是

4、否是群聊SendtimeDataTime否否否记录时间ContentTypeVarchar(50)否 否是判断文件的类型文件类型:字段数据类型可空主键外键说明ContentTypeInt否是否文件类型contentVarchar(50)是否否字符串其中文件类型一共有三类:001代表文本,002代表图片,003代表文件群组集合:字段数据类型可空主键外键说明GroupIdInt否是否群组号GroupmemberVarchar(1000)否否否群组成员3.3 存储原理图数据库客户端A 客户端B服务器 客户端C3.4 聊天记录的存储聊天内容一般是客户端和服务器进行交互的。可以是本地直接存入数据库,但是

5、如果把聊天记录提交给服务器,然后通过服务器存入数据库,这样来讲会相对安全一些。客户端将聊天记录提交给服务器的时候一般就已经知道文件的格式,传给服务器就两种方式一种是txt,另外一种便是url,url又分为两种,一种可能图片,另一种可能是文件。具体的过程如下:如果客户端传给服务器的是文本形式,那么它的文件形式就是001,服务器存入数据库中;如果客户端传给服务器的是图片格式,传给服务器的的是客户端的文件的地址(本地地址),例如:F:filepicturea.jpg ,然后以流的方式将图片以二进制文件的形式传给服务器的某个路径,例如:E:filepicture,上传服务器的时候可以利用后缀名判断是否

6、为图片的格式,如果是文件形式标识为002,写入数据库的时候就直接写服务器上的url;如果是文件的格式,标识为003,同样以流的方式传给服务器,假设传到服务器上的E:filesoundandvideo下,然后将文件的全路径写入数据库。查询的时候通过路径,到服务器的位置上直接查询,读取即可。4查询优化4.1举例2015-5-29(每天一张表,时间是唯一的)IdSenderIdReceiverIdGroupchatSendtimeContentType11234567774515true13:14:150012123456778955false13:16:150033778955123456fals

7、e13:18:150034778955123456false13:19:15002其中文件类型一共有三类:001代表文本,002代表图片,003代表文件文件类型ContentTypeContent001你好002E:programfilepicturea(url1)003E:programfilesoundandvideob(url2)群组群组号群组成员7774515123456 124562 4561428844544123545 125485 4564514.2 查询聊天记录的过程不论是单聊还是群聊都可以将接受者看成是一个对象,只是这个对象可能是看成是一对一的聊天,这样就有一个接受者可一个

8、用户,也可以是一个群组。首先利用groupchat判断是否是群聊。如果不是,就是单聊一对一,查询聊天记录时只需要利用时间索引,进入查询那天的表,然后在利用SenderId和ReceiverId以及具体时间查询即可;如果是群聊,那么只要是群里面的成员都是可以查询聊天记录的,首先利用时间索引定位到某天,然后利用ReceiverId(群组)查询,然后按照时间排序即可这样聊天记录就出现了,但是有个问题就是只有群里面的成员才有资格查询,当查询记录的时候可以对查询者进行验证,群组成员以字符串的形式存储,利用程序来判定查询者是不是群组成员。这样就能达到私聊和群聊聊天记录的查询。假设我要查询2015-5-29

9、,发送着为123456的所有聊天记录,只需要先定位到2015-5-29这张表,然后再定位到发送人,就能查询出和所有人的聊天记录,;如果要查询群聊记录,只要定位到接受者7774515,或者没有发送消息,只是查询自己所在群的聊天记录,首先只要判定是群聊,然后到群组表中匹配是否是群成员,如果是,查询出聊天记录即可。4.3 优化数据库在物理设备上的存储结构与存取方法就是数据库的物理结构,它依赖于选定的数据库管理系统。为一个给定的逻辑数据模型选取一个最合适的应用环境的物理结构的过程,就是数据库的物理设计。这一阶段主要的任务是确定数据库的物理结构,并不断的进行优化处理,主要建立索引。 以下是建立

10、的索引,其功能和运用如描述:名字描述Selete_on_ DateTime建立在每张表名上的索引UserId建立发送信息者的索引此外数据库将聊天记录分块,查询的时候设置一个时间段每10分钟一个块,当然还可以采用分页的方式,这样更加快捷,视觉效果也更好,聊天记录块的格式如下:发送者:接受者:发送时间:标识:文件类型内容:5多用户设计5.1 事务事务一般有两种类型。一种是系统提供的事务,另一种是用户定义的事务。系统提供的事务是指在执行某些语句时,一条语句就是一个事务。例如:UPDATE STUDENT Set CLASS=700l,这条语句本身就构成一个事务。由于没有条件限制,所以修改的就是表中的

11、全部数据,要么全部修改成功,要么全部失畋。而对于另外一种事务用户自定义的事务来说,使用它时就必须明确地使用事务调用语句米执行事务。事务的叫确结束语句为:COMMIT语句和ROLLBACK语句。其中COMMIT语句是提交语句,表示将争部完成的语句明确地提交到数据库中。ROLLBACK语句足取肖语句该语句将事务的操作全部取消,即表示事务操作失败。5.2 锁锁就是防止其他事务访问指定资源的手段。锁是实现并发控制的主要方法,是多个用户能够同时操纵同一个数据库中的数据而小发生数据不一致现象的重要保证。通常说,使用锁可以防止脏读(Dirty Read),不可重复读(Unrepeatable Read)和幻

12、觉读(Phantom Read)。所以为了优化系统的并发性,减少多个用户同时操作系统带来的问题,就应该根据事务的大小和系统活动的程度,锁定小同的资源。可以锁定数据表中单独的一行,带关键字的行(Key),页对象(Page),通常8Kb的数据页或者索引页,以及连续的几个8Kb的数据或索引页(Extent),还可以锁定整个数据表(Table)或者数据库(DB)。当可以锁定的对象封锁粒度较小时,比如锁定行或页对象时,提高了发控制能力,但是在增加锁的情况下,必定会增加系统的开销。当可“锁定的对象具有较大的封锁粒度时,比如说锁定整个表或肯锁定整个数据库时,降低了并发控制的能力,但是相对行锁定和页锁定减少r

13、系统的开销这样可以管理较少的锁对象。在实时数据的处理过程中,应该选择适当的封锁粒度,避免采用较小的封锁的粒度增加系统的开销使实时性能下降,也要避免采用较大的封锁粒度时,冲突机会变大,影响实时性能。5.3 多用户并发控制在聊天记录数据库系统的开发过程中,有时候需要将锁机制与事务的使用结合起来才能更好保证系统在多用户共同使用的情况下保持良好的并发性。每天的日期作为表的标识,保证信息表的唯一性。在实际的使用中是由多个群成员具有相同的使用权限,当某个群成员发送某条信息时,系统要根据固定的规则对该信息自动编号,信息编号的格式为:WX表一发送者一接受者一信息类型信息编号,其中关键是编号的生成。查询规则是:

14、首先定位到某一天的那张表格,再查找文件类型,再根据时间,找到信息记录。按照这样的计算规则,如果是单用户使用就是没有问题,但是如果在多用户使用的情况下,假如两个人同时存储时会产生同样的编号,存储时就有可能造成读写冲突突造成其中一个信息的写入失败。解决该问题时,作者曾设想:系统为最先接收信息的用户的编辑工作启动一个事务,设置它的隔离级别,让这样的事务隔离级别一直保持到事务的结束,再将其改回为Read Committed,也就是从一条信息的编辑录入到最后存储一直保持对表独占状态。但是因此会带来一个负面的结果就是其他用广的编辑工作不能被立即启动,必须等待前一个用户的编辑工作结束才能开始T作,而且,通常

15、一条信息录入条日比较多,编辑录入的时间可能会比较长。所以,如果按这样解决的话,冲突确实没有了,但系统的并发性就降低了这是我们不希望看到的。为此,必须引入锁的使用。具体解决办法如下所示:(1)事务并不在用户编辑工作中启动。这样多个用户的信息录入编辑工作就只会在自己主机中进行,相互之间不存在冲突的问题;(2)在将编辑的结果写回数据库动作之前启动事务全部写回动作结束之后结束事务,发生异常时回滚事务;(3)在事务的执行加入生成信息编号的算法;(4)在生成信息编号的过程中使用排它锁方式锁定信息表。其他用户不能访问该表。6问题及体会6.1 问题1. 如何对系统的查询功能进行优化?答:添加索引。2. 如何确

16、定数据存储的内容?答:通过已经了解的即时聊天软件,分析所需要用的数据以及数据类型,然后进行存储。3.什么是索引?答:索引是对数据库表中一个或多个列(例如,employee 表的姓氏 (lname) 列)的值进行排序的结构。4.增加索引有如此多的优点,索引的创建是不是越多越好呢?答:增加索引也有许多不利的一个方面。(1)创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 (2)索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 (3)当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护

17、,这样就降低了数据的维护速度。5.哪些列上可以创建索引?答:如下列上可以创建索引:(1)在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; (2)在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度; (3)在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; (4)在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间; (5)在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。6.2 体会在设计阶段遇到了许多的问题,比如所如何存储数据,如何查询如何优化

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论