一种网络文件的动态副本存储方法\n技术领域\n[0001] 本发明涉及一种网络文件的动态副本存储方法,属于分布式存储技术领域。\n背景技术\n[0002] 随着网络和信息技术的迅猛发展,现代化的终端如瘦客户端、手机等正以一种势不可挡的力量充斥着人们的日常工作、学习和生活。但是,由于终端的存储空间十分有限,如何使人们能够随时随地对自己的私有文件进行有效存储和管理就变得十分有意义。时下,网络磁盘如115网盘、金山网盘等十分流行,而这种网络存储若是将文件数据集中存储在一个服务器上,那么存储服务器的性能就会成为系统性能的瓶颈,也面临着可靠性和安全性等问题。所以,随着云计算的深入发展,分布式文件系统应运而生,它将大量不同类型的存储设备集合起来协同工作,将数据分散存储在多台独立的设备上,形成一个安全的数据存储系统,并且对外提供访问接口,并通过管理服务器定位存储信息,大大提高了存储系统的可靠性、可用性、可扩展性和存储效率。故可将分布式文件系统与网络磁盘相结合,实现网络文件的分布式存储,如专利号为201110448040.9,名称为《一种基于瘦客户端的文件分布式存储的运行方法》的专利就属此列。\n[0003] 鉴于网络磁盘的用户使用频率是有很大差异的,而现有的分布式文件存储系统,如Hadoop、MooseFS等为提高存储的可靠性,往往对每个文件都设置相同的副本数目,所以在某种程度上,这是一种存储资源的浪费。那么,如果可以为使用频繁的用户设置更高的副本数目,而使用频率很低的用户设置相对较低的副本数目就可以合理化利用存储资源了。\n本发明正是基于该思想,提出了一种网络文件的动态副本存储方法,为分布式存储系统设置三个副本等级(1至3),对用户的登陆次数进行实时统计更新,利用K-means算法将用户登陆次数根据登陆多少合理划分为3类,相应地为每个类的用户设置不同的副本数目。由此,将该方法运用到分布式存储系统中,就可以根据用户的使用频率对网络磁盘用户的文件进行合理的分布式存储,既保证了存储的可靠性,又提高了存储资源的利用率。\n发明内容\n[0004] 针对现代化的终端的存储限制以及现有分布式文件存储系统的副本设置的不足,本发明提出了一种网络文件的动态副本存储方法。\n[0005] 本发明的技术方案如下:\n[0006] 一种网络文件的动态副本存储方法,由以下系统来实现,该系统包括网络磁盘、MySQL数据库服务器和分布式存储服务器集群,其中网络磁盘是基于Web的网络文件存储磁盘;MySQL数据库服务器是安装有MySQL的数据库服务器;分布式存储服务器集群是一个分布式文件存储系统,它包括一个控制节点(Control Node)和多个存储节点(Storage Node),其中,控制节点用于监控用户存储目录的文件操作(创建、重命名、删除),并维护用户文件副本列表、文件存储位置列表和集群节点列表,存储节点是用户文件的真正存放位置,控制节点和存储节点之间通过TCP Socket进行通信。该系统三部分之间的关系为:\nMySQL数据库服务器上存储着网络磁盘的用户信息表(users),在分布式存储服务器集群的控制节点上布设网络磁盘的Apache以及用户存储目录,所有用户的网络请求都是以控制节点为中枢进行处理的,用户的文件最终存储在存储节点上,该存储方法具体步骤如下:\n[0007] 1)在MySQL数据库服务器上创建用户信息表,设置UserName、LoginCount和RepNum字段,其中UserName表示网络磁盘的用户名,LoginCount表示用户的登陆次数,RepNum表示用户的文件副本数目,LoginCount会随着用户登陆次数的增加而不断更新;\n[0008] 2)控制节点从用户信息表中读取LoginCount字段,并将所有用户的登陆次数写入并输出到本地的LoginCount.txt文件中;\n[0009] 3)利用K-means算法,将所有用户的登陆次数按照登陆多少分为A,B和C三类;\n[0010] 4)分别获取三个类的类边界和类中心,即最小值、类中心、最大值,并将其存放在一个数组中,进而对该数组进行排序,从而将所有的类边界和类中心按照由小到大的顺序存放于数组中,如A1是类A的最小值,A2是类A的类中心,A3是类A的最大值,同样B1、B2、B3分别是类B的最小值、类中心和最大值,C1、C2、C3分别是类C的最小值、类中心和最大值,则按照由小到大对数组内数值排序为:A1
将预备分类的数目指定为3,同时设置输入文件的路径为上述步骤2)中LoginCount.txt文件的存储位置;\n[0024] <2>逐行从输入文件中读取每一行数据,获取所有的样本数据存放在列表中;\n[0025] <3>从样本数据列表中随机选出3个样本数据作为3个类的初始类中心;\n[0026] <4>遍历样本数据列表,计算每个数据到3个类中心的距离,并将该数据归类到与3个类中心距离最近的类中;\n[0027] <5>重新计算每个类的平均值,将该平均值作为新的类中心,并更新每个类的中心;\n[0028] <6>比较每个类的新旧中心是否相同,若相同,则算法终止;否则转入步骤<4>,继续循环执行下去。\n[0029] 上述网络磁盘是部署在LAMP架构下的网络文件存储应用系统,其源文件是基于PHP语言编写,包括JavaScript、HTML、CSS、PHP和数据库文件。其中,JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言,同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能;CSS是英语Cascading Style Sheets(层叠样式表单)的缩写,它是一种用来表现HTML或XML等文件式样的计算机语言。\n[0030] 上述LAMP是一组用来搭建动态网站或者服务器的开源软件,包括Linux、Apache、MySQL和PHP,共同组成了一个强大的Web应用程序平台。其中,Linux处在最低层,提供操作系统;次低层是Apache,它是一个Web服务器,Apache提供可让用户获得Web页面的机制;\nMySQL是一个小型关系型数据库管理系统,存储数据;PHP是英文超级文本预处理语言Hypertext Preprocessor的缩写,意为超级文本预处理,它一种HTML内嵌式语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用。\n[0031] 上述Apache是一个Web服务器,其可提供让用户获得Web页面的机制。\n[0032] 上述MySQL是一个小型关系型数据库管理系统,用于存储数据。\n[0033] 上述用户文件副本列表是用户名和其对应的文件副本数目的键值对集合。\n[0034] 上述文件存储位置列表是文件名和其对应的存储节点IP地址的键值对集合。\n[0035] 上述集群节点列表是分布式存储服务器集群中所有存储节点IP地址的集合。\n[0036] 上述TCP是一种面向连接的、可靠的、基于字节流的运输层通信协议。\n[0037] 上述IP地址是一种在Internet上的给主机编址的方式,也称为网际协议地址。常见的IP地址,分为IPv4与IPv6两大类。\n[0038] 上述K-means算法是硬聚类算法,其基本思想是随机给定K个样本值作为K个初始类中心,以欧式距离作为相似度测度,按照最邻近原则把待分类样本值分到各个类。然后按平均法重新计算各个类的中心,从而确定新的中心。一直迭代,直到满足给定的标准测度函数。\n[0039] 上述欧氏距离也称欧几里得距离,它是一个通常采用的距离定义,是在m维空间中两个点之间的真实距离。\n[0040] 上述多线程是为了使多个线程并行工作以完成多项任务,来提高效率。\n[0041] 上述线程是在同一时间需要完成多项任务的时候被实现的。每个正在系统上运行的程序都是一个进程,每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,其可以在程序里独立执行。\n[0042] 上述Socket也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过“套接字”向网络发出请求或者应答网络请求,其包括服务器端和客户端。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。其中,服务器监听是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态;客户端请求是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字;连接确认是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。\n[0043] 本发明之所以使用K-means算法将网络磁盘用户的登陆次数根据登陆多少分为三类,而不是使用数值计算直接分类,是因为网络磁盘用户的登陆次数存在很大的个体差异,即登陆次数分布十分不均匀,若是按照公式: 来分为三个区间段,则\n会导致用户副本数目设置很不合理。而使用K-means算法可以有效将登陆次数根据登陆多少合理分为三类,使得三个类的类间分离度高,而类内紧凑度高,根据此设置文件副本数目就更加合理化。\n[0044] 本发明根据网络磁盘用户的登陆次数,利用K-means算法将不同使用频率的用户合理分为三类,使用频率较低的用户文件副本数目设置为1,使用频率较高的用户文件副本数目设置为3,其余的用户文件副本数目设置为2。本发明运行方法的优势在于将动态副本存储方法运用到分布式存储系统中,就可根据用户的使用频率对网盘用户的文件进行合理的副本设置,既保证了存储的可靠性,又提高了存储资源的利用率。\n附图说明\n具体实施方式\n[0045] 下面结合实施例对本发明做进一步说明,但不限于此。\n[0046] 实施例:\n[0047] 一种网络文件的动态副本存储方法,由以下系统来实现,该系统包括网络磁盘、MySQL数据库服务器和分布式存储服务器集群,其中网络磁盘是基于Web的网络文件存储磁盘;MySQL数据库服务器是安装有MySQL的数据库服务器;分布式存储服务器集群是一个分布式文件存储系统,它包括一个控制节点(Control Node)和多个存储节点(Storage Node),其中,控制节点用于监控用户存储目录的文件操作(创建、重命名、删除),并维护用户文件副本列表、文件存储位置列表和集群节点列表,存储节点是用户文件的真正存放位置,控制节点和存储节点之间通过TCP Socket进行通信。该系统三部分之间的关系为:\nMySQL数据库服务器上存储着网络磁盘的用户信息表(users),在分布式存储服务器集群的控制节点上布设网络磁盘的Apache以及用户存储目录,所有用户的网络请求都是以控制节点为中枢进行处理的,用户的文件最终存储在存储节点上,该存储方法具体步骤如下:\n[0048] 1)在MySQL数据库服务器上创建用户信息表,设置UserName、LoginCount和RepNum字段,其中UserName表示网络磁盘的用户名,LoginCount表示用户的登陆次数,RepNum表示用户的文件副本数目,LoginCount会随着用户登陆次数的增加而不断更新;\n[0049] 2)控制节点从用户信息表中读取LoginCount字段,并将所有用户的登陆次数写入并输出到本地的LoginCount.txt文件中;\n[0050] 3)利用K-means算法,将所有用户的登陆次数按照登陆多少分为A,B和C三类;