Java数据库,哪个更好用?

Java数据库,哪个更好用?,第1张

我将推荐给你们10个最高效的Java数据库

1、MongoDB——最受欢迎,跨平台,面向文档的数据库

MongoDB是一个基于分布式文件存储的数据库,使用C++语言编写。旨在为Web应用提供可扩展的高性能数据存储解决方案。应用性能高低依赖于数据库性能,MongoDB则是非关系数据库中功能最丰富,最像关系数据库的,随着MongDB 3.4版本发布,其应用场景适用能力得到了进一步拓展。

MongoDB的核心优势就是灵活的文档模型、高可用复制集、可扩展分片集群。你可以试着从几大方面了解MongoDB,如实时监控MongoDB工具、内存使用量和页面错误、连接数、数据库 *** 作、复制集等。

2、Elasticsearch ——为云构建的分布式RESTful搜索引擎

ElasticSearch是基于Lucene的搜索服务器。它提供了分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是比较流行的企业级搜索引擎。

ElasticSearch不仅是一个全文本搜索引擎,还是一个分布式实时文档存储,其中每个field均是被索引的数据且可被搜索也是一个带实时分析功能的分布式搜索引擎,并且能够扩展至数以百计的服务器存储及处理PB级的数据。ElasticSearch在底层利用Lucene完成其索引功能,因此其许多基本概念源于Lucene。

3、Cassandra——开源分布式数据库管理系统

最初是由Facebook开发的,旨在处理许多商品服务器上的大量数据,提供高可用性,没有单点故障。

Apache Cassandra是一套开源分布式NoSQL数据库系统。集Google BigTable的数据模型与Amazon Dynamo的完全分布式架构于一身。于2008开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。

因Cassandra是用Java编写的,所以理论上在具有JDK6及以上版本的机器中都可以运行,官方测试的JDK还有OpenJDK 及Sun的JDK。 Cassandra的 *** 作命令,类似于我们平时 *** 作的关系数据库,对于熟悉MySQL的朋友来说, *** 作会很容易上手。

4、Redis ——开源(BSD许可)内存数据结构存储,用作数据库,缓存和消息代理

Redis是一个开源的使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis 有三个主要使其有别于其它很多竞争对手的特点:Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的Redis相比许多键值数据存储系统有相对丰富的数据类型Redis可以将数据复制到任意数。Redis 这么火,它都解决了哪些问题?

5、Hazelcast ——基于Java的开源内存数据网格

Hazelcast 是一种内存数据网格 in-memory data grid,提供Java程序员关键任务交易和万亿级内存应用。虽然Hazelcast没有所谓的“Master”,但是仍然有一个Leader节点(the oldest member),这个概念与ZooKeeper中的Leader类似,但是实现原理却完全不同。同时,Hazelcast中的数据是分布式的,每一个member持有部分数据和相应的backup数据,这点也与ZooKeeper不同。

Hazelcast的应用便捷性深受开发者喜欢,但如果要投入使用,还需要慎重考虑。

6、Ehcache——广泛使用的开源Java分布式缓存

主要面向通用缓存、Java EE和轻量级容器。

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是hibernate中默认的CacheProvider。

主要特性有:快速简单,具有多种缓存策略缓存数据有两级,内存和磁盘,因此无需担心容量问题缓存数据会在虚拟机重启的过程中写入磁盘可以通过RMI、可插入API等方式进行分布式缓存具有缓存和缓存管理器的侦听接口支持多缓存管理器实例,以及一个实例的多个缓存区域提供Hibernate的缓存实现。Ehcache介绍及整合Spring实现高速缓存。

7、Hadoop ——用Java编写的开源软件框架

用于分布式存储,并对非常大的数据用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群进行高速运算和存储。

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算。

8、Solr ——开源企业搜索平台,用Java编写,来自Apache Lucene项目

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引也可以通过Http Get *** 作提出查找请求,并得到XML格式的返回结果。

与ElasticSearch一样,同样是基于Lucene,但它对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化。

9、Spark ——Apache Software Foundation中最活跃的项目,是一个开源集群计算框架

Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。

Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像 *** 作本地集合对象一样轻松地。

10、Memcached ——通用分布式内存缓存系统

Memcached是一套分布式快取系统,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。Memcached作为高速运行的分布式缓存服务器,具有以下的特点:协议简单,基于libevent的事件处理,内置内存存储方式。

通过以上的分析,相信你就知道怎么选择了

JDBC连接数据库

•创建一个以JDBC连接数据库的程序,包含7个步骤:

1、加载JDBC驱动程序:

在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),

这通过java.lang.Class类的静态方法forName(String className)实现。

例如:

try{

//加载MySql的驱动类

Class.forName("com.mysql.jdbc.Driver")

}catch(ClassNotFoundException e){

System.out.println("找不到驱动程序类 ,加载驱动失败!")

e.printStackTrace()

}

成功加载后,会将Driver类的实例注册到DriverManager类中。

2、提供JDBC连接的URL

•连接URL定义了连接数据库时的协议、子协议、数据源标识。

•书写形式:协议:子协议:数据源标识

协议:在JDBC中总是以jdbc开始

子协议:是桥连接的驱动程序或是数据库管理系统名称。

数据源标识:标记找到数据库来源的地址与连接端口。

例如:(MySql的连接URL)

jdbc:mysql:

//localhost:3306/test?useUnicode=true&characterEncoding=gbk

useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为

gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。

3、创建数据库的连接

•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,

该对象就代表一个数据库的连接。

•使用DriverManager的getConnectin(String url , String username ,

String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和

密码来获得。

例如:

//连接MySql数据库,用户名和密码都是root

String url = "jdbc:mysql://localhost:3306/test"

String username = "root"

String password = "root"

try{

Connection con =

DriverManager.getConnection(url , username , password )

}catch(SQLException se){

System.out.println("数据库连接失败!")

se.printStackTrace()

}

4、创建一个Statement

•要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3

种类型:

1、执行静态SQL语句。通常通过Statement实例实现。

2、执行动态SQL语句。通常通过PreparedStatement实例实现。

3、执行数据库存储过程。通常通过CallableStatement实例实现。

具体的实现方式:

Statement stmt = con.createStatement()

PreparedStatement pstmt = con.prepareStatement(sql)

CallableStatement cstmt =

con.prepareCall("{CALL demoSp(? , ?)}")

 

使用编程手段通过JetS3t登录S3可以分为两步。首先,必须创建一个AWSCredentials对象,然后将它传递到S3Service对象。AWSCredentials 对象非常简单。它将访问密钥和秘密密钥视为String。S3Service对象实际上是一个接口类型。因为S3同时提供RESTful API和一个SOAP API,JetS3t库可以提供两种实现类型:RestS3Service和SoapS3Service。就本文而言(包括大部分S3事务),RESTful API的简洁性让它成为一个很好的选择。

创建一个连接的RestS3Service 实例很简单,如清单 1 所示:

步骤 1. 创建一个JetS3t的RestS3Service实例

以下是引用片段:

def awsAccessKey = “blahblah”

def awsSecretKey = “blah-blah”

def awsCredentials = new AWSCredentials(awsAccessKey, awsSecretKey)

def s3Service = new RestS3Service(awsCredentials)

现在可以执行一些有趣的 *** 作了:例如,创建存储段、添加一个影片,然后获取一个有时间限制的URL 。实际上,这听起来像一个业务流程,不是吗?这是一个与发布有限资产(比如影片)有关的业务流程。

创建存储段

对于虚构的电影业务,我将创建一个称为bc50i的存储段。借助JetS3t,该流程很简单。通过S3Service类型,您有几个选项。我更喜欢使用getOrCreateBucket调用,如清单 2 所示。顾名思义,调用该方法可能返回一个存储段实例(表示为S3Bucket类型的实例)或在S3中创建代码段。

S3平台详细使用步骤简介

步骤 2. 在S3服务器上创建存储段

以下是引用片段:

def bucket = s3Service.getOrCreateBucket(”bc50i”)

不要被我这个简单的代码示例所蒙蔽。JetS3t库的扩展性非常强。例如,您可以快速确定拥有多少存储段 —— 只需通过listAllBuckets 调用请求一个S3 Service实例即可。该方法返回一个S3Bucket实例数组。对于任何存储段实例,您可以询问它的名称和创建日期。更重要的是,您可以通过JetS3t的AccessControlList类型控制与之相关的权限。例如,我可以获取bc50i存储段实例,并允许任何人可以公开读取和编写,如清单 3 所示:

步骤 3. 修改存储段的访问控制列表

以下是引用片段:

def bucket.acl = AccessControlList.REST_CANNED_PUBLIC_READ_WRITE

当然,通过API,您也可以随意删除存储段。Amazon甚至允许您指定创建存储段的地理位置。Amazon简化了存储实际数据的复杂性,但是您可以告诉Amazon要将存储段(及其内部所有的对象)放在美国或欧洲(当前可用选项)。

向存储段添加对象

使用JetS3t的API创建S3对象就像 *** 作存储段一样简单。JetS3t库也很智能,可以负责处理与S3存储段内文件相关的内容类型。例如,我想向S3上传一段影片nerfwars2.mp4,以便用户能够在有限的时间内观 看。创建一个S3对象与创建常见的java.io.File类型一样简单,并能将S3Object类型与存储段关联,如清单 4 所示:

步骤 4. 创建一个S3对象

以下是引用片段:

def s3obj = new S3Object(bucket, new File(”/path/to/nerfwars2.mp4″))

使用文件和存储段初始化S3Object之后,要做的所有事情就是通过putObject方法上传,如清单 5 所示:

步骤 5. 上传影片

以下是引用片段:

s3Service.putObject(bucket, s3obj)

使用清单 5 可以完成上传。现在影片位于Amazon服务器了,影片的键就是它的名称。当然,您可以根据需要重写该名称以调用其他对象。实际上,JetS3t API(以及 AmazonS3RESTful API)公开了许多信息,供您创建对象时使用。我们知道,您还可以提供访问控制列表。S3中的任何对象都可以保存API允许您创建的其他元数据。之后可以 通过该元数据的S3API(以及派生的JetS3t)查询任何对象。

创建对象的URL

到现在为止,我的S3实例有一个包含影片的存储段。实际上,我的影片可以通过以下URI获取: 。但是,只有我才能获取。(在本例中,我只能通过编程方式访问它,因为与所有内容关联的默认访问控制被设置为拒绝任何未授权访问)。我的目的是为选择的用 户提供一种方式查看新影片(在有限的时间内),直到我开始收取访问费用(S3也会提供帮助)。

创建一个公共URL是S3提供的一个便捷功能;实际上,使用S3,您可以创建一个公共URL,但只在一段时间内有效(例如,24 小时内)。对于我刚刚存储在S3服务器上的影片,我将创建一个48小时内有效的URL 。然后我将向选定的用户提供该 URL,以便他们下载并观看(假定他们在两天内下载)。

处理带有效期的文件

要创建一个针对S3对象的时间敏感型URL,您可以使用JetS3t的createSignedGetUrl方法,这是一个S3Service类型的静态方法。该方法采用一个存储段名称、一个对象键(在本例中是影片名,还记得吗?)、一些凭证(以JetS3t的AWSCredentials对象的形式)、截止日期。如果您了解所需的存储段和对象键,则可以通过清单 6 中的Groovy代码快速获取URL:

步骤 6. 创建一个时间敏感型URL

以下是引用片段:

def now = new Date()

def url = S3Service.createSignedGetUrl(

bucket.getName(), s3obj.key, awsCredentials, now + 2)

使用 Groovy,我可以通过 + 2 语法轻松指定一个 48 小时的限定日期。得到的 URL 如下所示(只有一行):

如果您的带宽和存储需求不稳定,则S3能提供很多帮助。例如,想想我演示的业务模型 — 影片在一年中特定的时间发布。在传统的存储模型中,您需要在某处机架上购买许多空间(或提供通向它的硬件和管道),很可能下载量很大,但随后会相对降低。 但是,您不能根据需要付费。使用 S3,该模型将根据需要付费 — 公司仅在需要时为存储和带宽付费。更重要的是,S3的安全特性可以帮助您进一步指定人们何时可以下载视频,甚至可以指定谁可以下载。

使用S3实现这些需求非常容易。在高水平上,创建一个受限的影片公共下载需要 4 个步骤:

1.登录S3。

2.创建存储段。

3.向存储段添加所需的视频(或对象)。

4.创建一个指向该视频的时间敏感型 URL 。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9259581.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存