如何写论文?写好论文?免费论文网提供各类免费论文写作素材!
当前位置:免费论文网 > 范文百科 > qq群数据库查询

qq群数据库查询

来源:免费论文网 | 时间:2017-03-05 06:06:35 | 移动端:qq群数据库查询

篇一:仿QQ聊天系统的数据库设计与实现

仿QQ聊天系统的数据库设计与实现1 引言

数据库课程设计是指对于一个给定的应用环境,构造设计优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足用户的应用需求。信息管理要求是指在数据库中应该存储和管理哪些数据对象;数据操作要求是指对数据对象要进行哪些操作,如查询、加入、删除、修改、统计等操作。数据库课程设计的目标是为了用户和各种应用系统提供一个信息基础设施和高效率的运行环境。高效率的运行环境包括:数据库的存取效率、数据库存储空间的利用率、数据库系统运行管理的效率都是高的。本次课程设计的目的是把所学的数据库的知识应用到实践中去。现今知识已越来越受到人们的重视,仿QQ聊天系统是参考腾讯公司发布的腾讯QQ,主要运用数据库知识和C#将其初步实现[1]。

1.1课题背景

现在的信息越来越发达,很多人都在使用QQ作为聊天工具,现根据腾讯公司的QQ聊天系统制造属于自己的聊天工具,表面上看上去是仿QQ聊天系统,其实等到时机成熟可以换成别的名字,相信在不远的将来在老师和同学们的帮助下,再借助互联网,我们一定可以打造出属于自己的聊天系统。当然系统存在着很多不足,需要老师的指点和帮助。

1.2系统需求分析

QQ聊天系统是大家广泛喜欢经常应用到CS应用程序软件[2],而现在仿QQ聊天系统开发工具,是本人对其程序的深感兴趣,不但可以了解从中的业务,而且还可以加强学习,以及对知识的回顾。同时也是尽快测试此聊天程序,以便和同学进行用自己的工具来交流聊天,由于好奇心促使和同学们一起来探讨此程序的开发,这样增强同学们之间的相互交流,相互学习。

该系统属于应用程序,需要对数据的处理,比如聊天信息要既是反馈给对方,故对数据的及时更新要求较高,保证数据的真实性.该系统在任何操作系统下都可以运行,但必须装有SQL2000数据库。

2 关键技术简介

2.1 SQL Server2000

SQL Server 2000 是Microsoft 公司2000年推出的SQL Server 数据库管理系统的版本。它是一个杰出的数据库平台,可用于大型联机事务处理、数据仓库、以及电子商务等。特点: 真正的客户机/服务器体系结构, 图形化用户界面, 丰富的编程接口工具。 SQL Server与Windows NT完全集成, 具有很好的伸缩性,支持Web技术。 SQL Server提供数据仓库功能[3]。

2.2 C#简介

C#是从C和C++派生来的一种简单、现代、面向对象和类型安全的编程语言。C#是用于创建运行在.NET公共语言运行库上的应用程序的语言之一,它从C语言和C++语言演化而来,是Microsoft专门使用.NET平台而创建的,并且考虑了其他语言的许多有点。

由于语法简单,使用C#开发应用程序比C++程序相对简单。但是,C#也是一种强大的语言,在C++中能完成的任务在C#中同样也能完成。C#的代码要比C++略长些,这是因为C#是一种类型安全的语言(与C++不同),虽然C#的代码略长但其代码更健壮,调试也比较简单。

C#是唯一为.NET Framework而设计的语言,是移植到其他操作系统上的.NET版本中使用的主要语言,能使用.NET Framework代码库提供的每种功能。反之,如果要使用VB.NET等语言尽可能与其以前的语言类似,而且仍然遵循CLR,这些语言就不能完全支持.NET代码库的某些功能。C#可以创建Windows应用程序,Web应用程序,Web服务这几种常见的应用程序[4]。具体实现如下:

1:首先根据对其业务逻辑的分析极其全面整合,加之我们所熟悉的QQ聊天技术。第一应该做的是界面,界面的美化程度直接反映着用户对此软件喜欢程度,所以借助了互联网搜索了一些好看的图片;

2:对界面的设计,这里所用到的就是C#里布局控件,精心的布局,这一点众所周之C#里丰富的控件为我们提供了方便,这样做就可以尽可能的让用户用起来比较舒服;

3:各个窗体画好后,接下来自然就是业务逻辑层的代码书写了,由于学习不够精,所以在书写代码方便并没有用到三层技术,但是本人对该系统考虑的比较全面,一些错误和异常都可以将其打印出来

书写代码比较规范,不管从类的书写,还是一些命名都非常规范;

C#里提供丰富的控件库,本来就可以自动生成一些代码,对业务逻辑比较明朗,对方法和类之间的命名比较规范,书写代码自然比较快,出错率比较少;方法就是增删改查, 最后结合数据库技术完成业务逻辑。

3 数据库概念结构设计

3.1 构思E-R图原则

原则1:能独立存在的事物,例如人、物、事、活动、事项等等,在其有多个基本项描述的特性需要关注时,就应把它作为实体。

根据原则1,分析本系统中的实体主要有用户、星座、信息类型、聊天信息、好友策略、好友和血型。

原则2:两个或多个实体间的关联与结合,如主管、从属、组成、占有、作用、配合、协同等等,当需要予以关注时,应作为联系。联系通常是某类行为动作,E-R图关注的是其状态与结果而非其过程。

根据原则2,对本系统间的实体之间的关联进行分析,用户与星座、血型、好友策略之间有组成与被组成的关系;在这里解释一下所谓的好友策略,我们在聊天时,别人可能会加我们为好友,我们可以不通过系统的提示,自动允许,这是一种策略。另外一种策略就是别人要加我们为好友时,先通过系统信息请求我们是否同意。此外,QQ消息和消息类型之间也有组成与被组成的关系。

原则3:实体的属性是实体的本质特征。实体应有标识属性,并指定其中一个作为主标识。联系的属性是联系的结果或状态。属性具有如下几个特点:非多值性、非复合性、非导出性。实体的属性还应有非关联性。

根据原则3,分析本系统中的实体属性。QQ用户的属性包括QQ号(标识属性)、QQ密码、用户昵称、用户真实姓名、性别和年龄等;星座的属性包括星座的编号(标识属性)和名称;血型的属性包括血型编号(标识属性)和名称;好友策略的属性包括策略编号(标识属性)和策略名称;消息类型包括消息类型编号(标识属性)和消息类型名称;QQ消息的属性包括消息记录编号(标识属性)、消息记录名称、消息接受状态和接发消息的时间

原则4:所有基本项在同一E-R图中作为属性要在仅在一个地方出现[5]。

3.2设计E-R图

根据构思E-R图的原则联系本系统的需求分析,将数据库中所涉及的各个实体与它们各自的属性以及各个实体之间的关联用E-R图的形式表现出来,实体用方形表示,属性用椭圆表示,关联关系用没有箭头的直线连接,具体如下图3.1所示:

图3.1QQ系统E-R图

3.3 E-R图向关系模型转换原则

(1) 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是关系的候选码。如果与某一端实体对应的关系模式合并,则需要在改关系模式的属性中加入另一个关系模式的码和联系本身的属性。

(2)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。

(3)一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。

(4)3个或3个以上实体间的一个多元联系可以转换为一个关系模式。与该联系相连的

篇二:超大机群上的简单数据处理

A单词频率统计

本节包含了一个完整的程序,用于统计在一组命令行指定的输入文件中,每一个不同的单词出现频率.

#include "mapreduce/mapreduce.h"

//用户map函数

class WordCounter : public Mapper {

public:

virtual void Map(const MapInput& input) {

const string& text = input.value();

const int n = text.size();

for (int i = 0; i < n; ) {

//跳过前导空格

while ((i < n) && isspace(text[i]))

i++;

// 查找单词的结束位置

int start = i;

while ((i < n) && !isspace(text[i]))

i++;

if (start < i)

Emit(text.substr(start,i-start),"1");

}

}

};

REGISTER_MAPPER(WordCounter);

//用户的reduce函数

class Adder : public Reducer {

virtual void Reduce(ReduceInput* input) {

//迭代具有相同key的所有条目,并且累加它们的value

int64 value = 0;

while (!input->done()) {

value += StringToInt(input->value());

input->NextValue();

}

//提交这个输入key的综合

Emit(IntToString(value));

}

};

REGISTER_REDUCER(Adder);

int main(int argc, char** argv) {

ParseCommandLineFlags(argc, argv);

MapReduceSpecification spec;

// 把输入文件列表存入"spec"

for (int i = 1; i < argc; i++) {

MapReduceInput* input = spec.add_input();

input->set_format("text");

input->set_filepattern(argv[i]);

input->set_mapper_class("WordCounter");

}

//指定输出文件:

// /gfs/test/freq-00000-of-00100

// /gfs/test/freq-00001-of-00100

// ...

MapReduceOutput* out = spec.output();

out->set_filebase("/gfs/test/freq");

out->set_num_tasks(100);

out->set_format("text");

out->set_reducer_class("Adder");

// 可选操作:在map任务中做部分累加工作,以便节省带宽

out->set_combiner_class("Adder");

// 调整参数: 使用2000台机器,每个任务100MB内存

spec.set_machines(2000);

spec.set_map_megabytes(100);

spec.set_reduce_megabytes(100);

// 运行它

MapReduceResult result;

if (!MapReduce(spec, &result)) abort();

// 完成: ’result’结构包含计数,花费时间,和使用机器的信息

return 0;

}

Google三大核心技术之二:GFS

GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,但可以提供容错功能。它可以给大量的用户提供总体性能较高的服务。

1、设计概览

(1)设计想定

GFS与过去的分布式文件系统有很多相同的目标,但GFS的设计受到了当前及预期的应用方面的工作量及技术环境的驱动,这反映了它与早期的文件系统明显不同的设想。这就需要对传统的选择进行重新检验并进行完全不同的设计观点的探索。

GFS与以往的文件系统的不同的观点如下:

1、 部件错误不再被当作异常,而是将其作为常见的情况加以处理。因为文件系统由成百上千个用于存储的机器构成,而这些机器是由廉价的普通部件组成并被大量的客 户机访问。部件的数量和质量使得一些机器随时都有可能无法工作并且有一部分还可能无法恢复。所以实时地监控、错误检测、容错、自动恢复对系统来说必不可 少。

2、按照传统的标准,文件都非常大。长度达几个GB的文件是很平常的。每个文件通常包含很多应用对象。当经常要处理快速增长的、包含数以 万计的对象、长度达TB的数据集时,我们很难管理成千上万的KB规模的文件块,即使底层文件系统提供支持。因此,设计中操作的参数、块的大小必须要重新考 虑。对大型的文件的管理一定要能做到高效,对小型的文件也必须支持,但不必优化。

3、大部分文件的更新是通过添加新数据完成的,而不是改变已 存在的数据。在一个文件中随机的操作在实践中几乎不存在。一旦写完,文件就只可读,很多数据都有这些特性。一些数据可能组成一个大仓库以供数据分析程序扫 描。有些是运行中的程序连续产生的数据流。有些是档案性质的数据,有些是在某个机器上产生、在另外一个机器上处理的中间数据。由于这些对大型文件的访问方 式,添加操作成为性能优化和原子性保证的焦点。而在客户机中缓存数据块则失去了吸引力。

4、工作量主要由两种读操作构成:对大量数据的流方式 的读操作和对少量数据的随机方式的读操作。在前一种读操作中,可能要读几百KB,通常达 1MB和更多。来自同一个客户的连续操作通常会读文件的一个连续的区域。随机的读操作通常在一个随机的偏移处读几个KB。性能敏感的应用程序通常将对少量 数据的读操作进行分类并进行批处理以使得读操作稳定地向前推进,而不要让它来来回回的读。

5、工作量还包含许多对大量数据进行的、连续的、向文件添加数据的写操作。所写的数据的规模和读相似。一旦写完,文件很少改动。在随机位置对少量数据的写操作也支持,但不必非常高效。

6、系统必须高效地实现定义完好的大量客户同时向同一个文件的添加操作的语义。

(2)系统接口

GFS提供了一个相似地文件系统界面,虽然它没有向POSIX那样实现标准的API。文件在目录中按层次组织起来并由路径名标识。

(3)体系结构:

一 个GFS集群由一个master和大量的chunkserver构成,并被许多客户(Client)访问。如图1所示。Master和 chunkserver通常是运行用户层服务进程的Linux机器。只要资源和可靠性允许,chunkserver和client可以运行在同一个机器 上。

文件被分成固定大小的块。每个块由一个不变的、全局唯一的64位的chunk-handle标识,chunk-handle是在块创建时 由 master分配的。ChunkServer将块当作Linux文件存储在本地磁盘并可以读和写由chunk-handle和位区间指定的数据。出于可靠 性考虑,每一个块被复制到多个chunkserver上。默认情况下,保存3个副本,但这可以由用户指定。

Master维护文件系统所以的元 数据(metadata),包括名字空间、访问控制信息、从文件到块的映射以及块的当前位置。它也控制系统范围的活动,如块租约(lease)管理,孤儿 块的垃圾收集,chunkserver间的块迁移。Master定期通过HeartBeat消息与每一个 chunkserver通信,给chunkserver传递指令并收集它的状态。

与每个应用相联的GFS客户代码实现了文件系统的API并与master和chunkserver通信以代表应用程序读和写数据。客户与master的交换只限于对元数据(metadata)的操作,所有数据方面的通信都直接和chunkserver联系。 客 户和chunkserver都不缓存文件数据。因为用户缓存的益处微乎其微,这是由于数据太多或工作集太大而无法缓存。不缓存数据简化了客户程序和整个系 统,因为不必考虑缓存的一致性问题。但用户缓存元数据(metadata)。Chunkserver也不必缓存文件,因为块时作为本地文件存储的。

(4)单master。

只 有一个master也极大的简化了设计并使得master可以根据全局情况作出先进的块放置和复制决定。但是我们必须要将master对读和写的参与减至 最少,这样它才不会成为系统的瓶颈。Client从来不会从master读和写文件数据。Client只是询问master它应该和哪个 chunkserver联系。Client在一段限定的时间内将这些信息缓存,在后续的操作中Client直接和chunkserver交互。

以图1解释一下一个简单的读操作的交互。

1、client使用固定的块大小将应用程序指定的文件名和字节偏移转换成文件的一个块索引(chunk index)。

2、给master发送一个包含文件名和块索引的请求。

3、master回应对应的chunk handle和副本的位置(多个副本)。

4、client以文件名和块索引为键缓存这些信息。(handle和副本的位置)。

5、Client 向其中一个副本发送一个请求,很可能是最近的一个副本。请求指定了chunk handle(chunkserver以chunk handle标识chunk)和块内的一个字节区间。

6、除非缓存的信息不再有效(cache for a limited time)或文件被重新打开,否则以后对同一个块的读操作不再需要client和master间的交互。

通常Client可以在一个请求中询问多个chunk的地址,而master也可以很快回应这些请求。

(5)块规模:

块规模是设计中的一个关键参数。我们选择的是64MB,这比一般的文件系统的块规模要大的多。每个块的副本作为一个普通的Linux文件存储,在需要的时候可以扩展。

块规模较大的好处有:

1、减少client和master之间的交互。因为读写同一个块只是要在开始时向master请求块位置信息。对于读写大型文件这种减少尤为重要。即使对于访问少量数据的随机读操作也可以很方便的为一个规模达几个TB的工作集缓缓存块位置信息。

2、Client在一个给定的块上很可能执行多个操作,和一个chunkserver保持较长时间的TCP连接可以减少网络负载。

3、这减少了master上保存的元数据(metadata)的规模,从而使得可以将metadata放在内存中。这又会带来一

些别的好处。

不利的一面:

一个小文件可能只包含一个块,如果很多Client访问改文件的话,存储这些块的chunkserver将成为访问的热点。但在实际应用中,应用程序通常顺序地读包含多个块的文件,所以这不是一个主要问题。

(6)元数据(metadata):

master 存储了三中类型的metadata:文件的名字空间和块的名字空间,从文件到块的映射,块的副本的位置。所有的metadata都放在内存中。前两种类型 的metadata通过向操作日志登记修改而保持不变,操作日志存储在master的本地磁盘并在几个远程机器上留有副本。使用日志使得我们可以很简单 地、可靠地更新master的状态,即使在master崩溃的情况下也不会有不一致的问题。相反,mater在每次启动以及当有 chuankserver加入的时候询问每个chunkserver的所拥有的块的情况。

A、内存数据结构:

因为metadata存储在内存中,所以master的操作很快。进一步,master可以轻易而且高效地定期在后台扫描它的整个状态。这种定期地扫描被用于实现块垃圾收集、chunkserver出现故障时的副本复制、为平衡负载和磁盘空间而进行的块迁移。

这 种方法的一个潜在的问题就是块的数量也即整个系统的容量是否受限与master的内存。实际上,这并不是一个严重的问题。Master为每个 64MB的块维护的metadata不足64个字节。除了最后一块,文件所有的块都是满的。类似的,每个文件的名字空间数据也不足64个字节,因为文件名 是以一种事先确定的压缩方式存储的.如果要支持更大的文件系统,那么增加一些内存的方法对于我们将元数据(metadata)保存在内存种所获得的简单 性、可靠性、高性能和灵活性来说,这只是一个很小的代价。

B、块位置:

master并不为chunkserver所拥有的块的副本的保存一个不变的记录。它在启动时通过简单的查询来获得这些信息。Master可以保持这些信息的更新,因为它控制所有块的放置并通过HeartBeat消息来监控chunkserver的状态。 这样做的好处:因为chunkserver可能加入或离开集群、改变路径名、崩溃、重启等,一个集群重有成百个server,这些事件经常发生,这种方法就排除了master与chunkserver之间的同步问题。

另一个原因是:只有chunkserver才能确定它自己到底有哪些块,由于错误,chunkserver中的一些块可能会很自然的消失,这样在master中就没有必要为此保存一个不变的记录。

C、操作日志:

操作日志包含了对metadata所作的修改的历史记录。它作为逻辑时间线定义了并发操作的执行顺序。文件、块以及它们的版本号都由它们被创建时的逻辑时间而唯一地、永久地被标识。

操作日志是如此的重要,我们必须要将它可靠地保存起来,并且只有在metadata的改变固定下来之后才将变化呈现给用户。所以我们将操作日志复制到数个远程的机器上,并且只有在将相应的日志记录写到本地和远程的磁盘上之后才回答用户的请求。

Master可以用操作日志来恢复它的文件系统的状态。为了将启动时间减至最小,日志就必须要比较小。每当日志的长度增长到超过一定的规模后,master就要检查它的状态,它可以从本地磁盘装入最近的检查点来恢复状态。

创 建一个检查点比较费时,master的内部状态是以一种在创建一个检查点时并不耽误即将到来的修改操作的方式来组织的。Master切换到一个新的日子文 件并在一个单独的线程中创建检查点。这个新的检查点记录了切换前所有的修改。

篇三:qq历史聊天内容删除了怎么恢复查看呢?

qq历史聊天内容删除了怎么恢复查看呢?

手机电池修复方法

手机在现在已经是十分普能,也是在日常生活中出现频率最搞的电子产品,但大家都会感觉到一块手机电池在使用一段时间后,待机的时间会越来越短,这与电池的质量和大家的使用是十分相关的。那么手机电池在使用一段时间待机时间变短后,我们有没有办法放他能恢复呢。

qq历史聊天内容删除了怎么恢复查看呢?

常见的手机电池修复的方法:

1. 使用干净的橡皮擦或者其他材质的清洁工具轻轻擦拭锂电池上的金属触点及手机上的金属触点,有助于充电状况及电力的持久 。

锂电池修复方法一的原理:长时间使用的锂电池的金属表面会有一定程度的氧化,导致手机电池跟手机接触不好,锂电池使用时间变短,而用橡皮檫或其他清洁工具可擦除表面的生锈物质,让电池与手机接触变好。

2. 将用到自动关机的旧手机锂电池用保鲜膜将其牢牢裹住,包裹时尽量服帖,里外共三层,确保电池处于真空状态。然后,再在保鲜膜外面包三层报纸,使锂电池完全密封。放入冰箱的冷冻层,48小时后,取出电池,一一去掉包裹在外的六层纸膜,锂电池没有因冷冻而导致表面膨胀或变形。冷却一段时间后,然后充电。

低温能使锂电池内部的电解液发生变化,促进刚刚经过冷冻的电池发生化学反应。锂电池的使用过程其实是一个充放电过程。在这期间,电池内的阴电荷和阳电荷相互交撞。电池之所以会越来越不经用,是因为

在正常的室温下,电子内部的动能比较大,因而电池处于活跃状态,漏电情况相对频繁。而将锂电池放入

低温环境里,锂电池表面的锂膜与电解液的微观结构,以及它们的交界面都会发生明显变化,导致电池内部暂不活跃,漏电流减少。所以再次充电后,手机的待电时间会增加。

3. 让接近报废的锂电池彻底放电,然后重新充电激活电池。具体方法为:对手机进行深度放电,就是通过耗尽内部电能,来达到更深程度的再充电,这需要采用一些非常规的方法。用特定的装置连接手机与一个低电压小灯泡,电池内部的电量会传输到小灯泡上,直到全部都放光。“手机需要通过较低的电压慢慢耗尽电能。正常情况下,手机接通后若低于3.6伏的额定电压,就会自动关机。”放完电后,再次充电的手机电池可以使用更长时间。

对手机进行深度放电,就是通过耗尽内部电能,来达到更深程度的再充电,这需要采用一些非常规的方法。想办法将手机与一个1.5V小灯泡相连,锂电池内部的电量会传输到小灯泡上,直到全部都放光。“手机需要通过较低的电压慢慢耗尽电能。正常情况下,手机接通后若低于3.6伏的额定电压,就会自动关机。”放完电后,再次充电的手机电池可以使用更长时间。

通过xRecovery2对手机电池修复

1. 手机一定要已经ROOT并且已经安装了xRecovery2

2. 开机正常充电到100%,请使用直充,不要用电脑USB充

3.不要拔电源线,重启手机进入xRecovery

4. 在 recovery模式, 找到 Advanced options --> Wipe Battery Stats --> Yes,删除电池状态

5. 直接拔下电池(充电线不要拔);

6. 过一会儿(十几秒以上吧,自己把握)把电池装上,不要动,手机会过个一分钟多自己启动的

7. 手机启动进入系统后,你会发现电池电量显示在88%左右,而不是刚才的100%

8. 继续充电至100%

9. 重复2-8的步骤4-5次,在手机启动进入系统时(第7步)电池显示100%说明电池修复成功

手机电池的保养

1、按照标准的时间和程序充电,即使是前三次也要如此进行; 当出现手机电量过低提示时,应该尽量及时开始充电;

2、尽量避免睡前充电,因为睡前充电的时间都较长,而且夜间电压不稳定,许多地方的夜间电压都比较高并且波动 大,对电池的影响较大。

3、锂电池的激活并不需要特别的方法,在手机正常使用中锂电池会自然激活。


qq群数据库查询》由:免费论文网互联网用户整理提供;
链接地址:http://www.csmayi.cn/show/187612.html
转载请保留,谢谢!