




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验15BIPFS文件系统与数据库访问的并发控制一、实验目的熟悉IPFS和Libp2p协议,掌握如何通过IPFS上传和查找文件。深入理数据库系统中提供的安全存储机制。深化对事务ACID属性的理解。能够利用synchronized、ThreadLocal、wait()和notify()进行并发控制。实验准备1.IPFS与Libp2p星际文件系统(InterPlanetaryFileSystem).IPFS是一个点到点超媒体协议,其目标是取代传统的互联网协议HTTP。IPFS网络有如下特点:(1)互联网信息永久存储,不会发生404错误。IPFS可以存储任何类型的文件。即使某一个节点把文件删除了,只要存储文件的网络依然存在,那么该网页就可以被正常访问。(2)解决资源冗余问题。IPFS会把存储文件,做一次哈希计算,只有文件内容相同,它们的哈希才一样。因此,在IPFS网络上极大地减少资源冗余的问题,提高网络空间的利用率。(3)基于内容寻址。IPFS的网络上运行着一条区块链,即用来存储互联网文件的哈希值表。一个文件上传到IPFS的网络中,IPFS系统就会对文件内容生成一个唯一的哈希值。如果要访问资源,直接通过该哈希值进行访问。Libp2p汇集了各种传输和点对点协议,使开发人员可以轻松构建大型,强大的p2p网络。Libp2p被用作IPFS的网络层,主要负责发现节点、连接节点、发现数据、传输数据。2.多个事务的执行方式(1)事务串行执行:事务一个接一个的运行,每个时刻只有一个事务运行。(2)交叉并发方式:在单处理机系统中,并行事务并行操作轮流交叉运行。(3)同时并发方式:在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行。3.并发控制并发控制目的进行正确调度、保证事务的隔离性和数据库的一致性。在并发控制方面,Java语言除了使用同步关键字synchronized外,还有内部锁、重入锁、读写锁和信号量等。三、实验内容1、下载并安装ipfsipfs在内网下载不了,需要VPN进入ipfs官网,官网网址:https://ipfs.io/。2、在两台联网的机器尚运行IPFS,在一台机器上上传一个文件,在另一个机器上找到该文件。下载ipfsipfs在内网下载不了,需要VPN进入ipfs官网,官网网址:https://ipfs.io/,下载之后解压到指定的文件夹。安装ipfs首先要配置环境变量,在path中加入ipfs路径然后打开cmd,进入ipfs目录,查看ipfs信息初始化ipfs网络环境在dos中输入命令ipfsinit初始化ipfs网络环境查看id初始化之后,系统会分配一个属于你自己的id。也就是IPFS网络哈希值(类似你在IPFS网络中的身份证id)。通过这个id,别人就可以访问到你的节点。在dos中输入命令ipfsid查看id至此,一个IPFS节点已搭建完毕。运行IPFS在dos中输入ipfsdaemon命令,启动ipfs服务监听用于监听ipfs网络通信数据,使用的监听端口是5001Ctrl+C退出测试上传文件3.1在ipfs当前同级目录下新建一个txt文件1.txt,在1.txt随意添加内容,保存。然后在dos中输入命令ipfsadd1.txt,3.2用dos命令查看文件内容(关闭ipfs服务监听)在dos上输入命令ipfscat(上面的哈希值),就可看到刚才的文件。3.3在ipfs可视化界面里查看文件内容首先要开启ipfs服务监听,然后在监听界面中找到相应的网址,复制该网址到浏览器中就打开了ipfs可视化界面。输入我们刚才上传的文件1.txt的哈希值,点击浏览就可看到文件的内容。ipfs可视化上传文件点击文件,点击+导入文件,上传成功,查看文件的CID,也就是此文件的哈希值。3.5不同电脑的文件传输在另一个ipfs中输入复制的CID,就可收到对应的文件。3、通过调试下面的程序,体会在多线程的环境中,在不进行并发控制的情况下,使用单个connection会引起事务的混乱.(1)获取connection工具类:packagejdbcPool.util;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConnectorUtil{publicstaticfinalStringuser="root";publicstaticfinalStringpwd="123456";publicstaticfinalStringdriver="com.mysql.jdbc.Driver";publicstaticfinalStringurl="jdbc:mysql://localhost:3306/test";privatestaticConnectionconn;privatestaticintconnectCount=0;static{try{Class.forName(driver);}catch(ClassNotFoundExceptione){System.out.println("找不到数据库驱动..");e.printStackTrace();}}/***获取数据库连接实例*/publicsynchronizedstaticConnectiongetInstance(){if(conn==null){try{conn=DriverManager.getConnection(url,user,pwd);conn.setAutoCommit(false);//设置为不自动提交。。。connectCount++;System.out.println("连接数据库次数:"+connectCount);}catch(SQLExceptione){System.out.println("连接数据库失败....");e.printStackTrace();}}returnconn;}}(2)业务接口实现类:packagejdbcPool.business;importjava.sql.Connection;importjava.sql.SQLException;importjava.sql.Statement;importjdbcPool.util.ConnectorUtil;publicclassStudentService{privateConnectionconn;privatestaticStudentServicestudentService;privateStudentService(){conn=ConnectorUtil.getInstance();}publicstaticsynchronizedStudentServicegetInstance(){if(studentService==null){studentService=newStudentService();}returnstudentService;}publicvoidinsert(Stringid,Stringname,Stringno)throwsException{StringaddStr="insertintostudent(id,name,no)values('"+id+"','"+name+"','"+no+"')";Statementstatement=null;try{statement=conn.createStatement();statement.execute(addStr);if("1350".equals(id)){//模仿某个线程执行service某个方法中某个步骤出现异常Thread.sleep(3000);//模仿当前线程执行时间较长。。。。。System.out.println("发生异常。。。。。");System.out.println("记录"+id+"插入失败。。。。");conn.rollback();//出现异常事务回滚。。。thrownewException();}else{mit();System.out.println("记录"+id+"插入成功。。。。");}}catch(SQLExceptione){System.out.println("创建statement失败");e.printStackTrace();}finally{if(statement!=null){try{statement.close();}catch(SQLExceptione){e.printStackTrace();}}}}}(3)模拟用户请求的线程类:packagejdbcPool.thread;importjdbcPool.business.StudentService;publicclassRequestimplementsRunnable{privateStringid;publicRequest(Stringid){this.id=id;}@Overridepublicvoidrun(){//模仿service的单例模式try{StudentService.getInstance().insert(this.id,"name"+id,"no"+id);}catch(Exceptione){e.printStackTrace();}}}(4)测试类:packagejdbcPool.test;importjdbcPool.thread.Request;publicclassMain{//200个线程并发访问同一个connectionpublicstaticvoidmain(String[]args){for(inti=1300;i<1500;i++){Threadth=newThread(newRequest(String.valueOf(i)));th.start();}}}4、利用通信原语wait()和notify()共同控制线程,完成如下任务:thread1向数据库中添加记录,thread2从数据库中取出一条记录并更新标志位visited。当数据库中的所有记录都被访问过时,等待新的记录的添加。四、实验报告1.通过实验完成下列问题(1)给出实验3的结果和4对应的程序。实验3ConnectorUtil.javaStudentService.javaRequest.javaMain.java实验3运行结果如下:实验4Data.javaDataAdd.javaDataVisit.javaMain.java实验4运行结果如下:(2)如何对实验1中的代码进行改进,从而实现并发控制?2.问答题(1)描述java的并发控制机制。Java的并发控制使用场景是在多线程处理过程当中,如何实现线程之间数据处理的同步。并行程序开发涉及多线程、多任务的协作和数据共享等问题。在JDK中提供了多种途径实现多线程间的并发控制,例如常用的有内部锁、重入锁、读写锁和信号量。在java中,每个线程有一块工作内存区,其中存放着被所有线程共享的主内存中的变量的值得拷贝,当线程执行时,它在自己的工作内存中操作这些变量。当一个线程使用某一个变量时,不论程序是否正确地使用线程同步操作,它获取的值一定是由它本身或者其他线程存储到变量中的值。一个变量时Java程序可以存取的一个地址,它不仅包括基本类型变量、引用类型变量,而且还包括数组类型变量。保存在主内存区的变量可以被所有线程共享,但是一个线程存取另一个线程的参数或者局部变量时不可能的,所以开发人员不必担心局部变量的线程安全问题。(2)SQLserver提供了哪些并发控制机制?事务和锁是并发控制的主要机制,SQLServer通过支持事务机制来管理多个事务,保证数据的一致性,并使用事务日志保证修改的完整性和可恢复性。SQLServer遵从三级封锁协议,从而有效地控制并发操作可能产生的丢失更新、读“脏”数据、不可重复读等错误。SQLServer具有多种不同粒度的锁,允许事务锁定不同的资源,并能自动使用与任务相对应的等级锁来锁定资源对象,以使锁的成本最小化。SQLServer的事务分为两种类型:系统提供的事务和用户定义的事务。系统提供的事务是指在执行某些语句时,一条语句就是一个事务,它的数据对象可能是一个或多个表,可能是表中的一行数据或多行数据;用户定义的事务以BEGINTRANSACTION语句开始,以COMMIT或者ROLLBACK结束。对于用户定义的分布式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年湖北c1教练员从业资格证考试
- 2025年合肥货运从业资格证模拟考试题
- 最苦逼的四种安全人希望你一条都不要中
- 数字货币跨境支付2025年现状与未来趋势分析报告
- 【期末试卷】2021-2022学年新疆柯坪县柯坪湖州国庆中学高二下学期期中考试语文试题(含答案)
- 2025年规划管理服务项目合作计划书
- 货运航空试题及答案
- 2025年低温巴氏乳合作协议书
- 高危儿培训试题及答案
- 2025铁路安全教育培训考试试题(+答案)
- 村书记考试试题及答案
- 2025内蒙古森工集团招聘工勤技能人员3100人笔试参考题库附带答案详解
- 小学生摄影课课件教学
- 2025潍坊银行笔试题库及答案
- 脑炎护理查房
- 2025公需课《人工智能赋能制造业高质量发展》试题及答案
- 初中生理想信念教育课件
- 2025年智慧水利行业调研分析报告
- 2025天津市河北区辅警考试试卷真题
- 老年髋部骨折围术期护理临床实践专家共识2024版解读
- 普通外科围手术期病人血液管理中国专家共识(2025版)解读课件
评论
0/150
提交评论