BaaS应用中选择何种数据库更适合低层结构? (baas低层用什么数据库)

近年来,随着云计算、大数据、等新技术的发展,BaaS(Backend as a Service)应用越来越普及。BaaS应用以服务的形式提供后端的功能,包括数据存储、身份验证、推送服务、消息队列等等。而在BaaS应用中的数据存储中,数据库的选择是非常关键的一步。在选择何种数据库更适合低层结构时,需要考虑多个方面因素。

一、适合低层结构特点

在选择何种数据库更适合低层结构之前,需要了解低层结构的特点。低层结构通常是指后端服务所涉及的实际数据、物理设备等。低层结构的特点包括:

1. 存储量大、种类广:低层结构中包含各种类型的数据,如结构化数据、半结构化数据、非结构化数据等等,存储量也非常大。

2. 存取速度快:低层结构中的数据在应用中需要快速存取,能够支持高并发读写。

3. 高可靠性:低层结构中的数据是应用的核心内容,需要保障数据的安全性和可靠性。

4. 易扩展:低层结构需要满足可扩展性,随着应用规模的扩大,数据存储量也需要随之扩展。

二、不同数据库类型介绍

在BaaS应用中,常用的数据库类型包括关系型数据库、NoSQL数据库、内存数据库、图数据库等。不同的数据库类型在适合低层结构上各有优劣:

1. 关系型数据库

关系型数据库是一种基于关系模型的数据库管理系统,通常采用SQL语言来操作数据。因其稳定性、可靠性、数据完整性方面的优势,关系型数据库长期是企业信息化中主流的存储方式之一。关系型数据库适合于存储结构化数据,如订单、用户信息、账单等,但在存储非结构化数据和动态数据时可能不如NoSQL数据库。

2. NoSQL数据库

NoSQL(Not Only SQL)数据库是一种新兴的数据库系统,它不使用SQL语言来操作数据,而是通过键值对、文档、列族等方式来存储数据。NoSQL数据库通常具有分布式、横向扩展、高性能、高可用等特点,适合非结构化数据的存储,如社交网络、日志、传感器数据等。但是在一些对数据一致性要求较高的应用场景中,NoSQL数据库可能不如关系型数据库。

3. 内存数据库

内存数据库(In-Memory Database)是指将数数据存储在内存中的数据库,它能够提高数据访问速度和响应速度。内存数据库适合那些需要高并发、实时响应、繁忙的应用场景。但由于存储器代价昂贵,内存数据库相对于磁盘数据库来说存储的代价高。

4. 图数据库

图数据库是一种专门用于存储图形数据的数据库,它的特点是能够高效地存储和遍历大规模图形数据。图数据库适合于存储具有复杂关系的数据,如社交网络中的用户关系、交通规划中的路线规划等。

三、如何选择最适合低层结构的数据库

在选择何种数据库更适合低层结构时,需要综合考虑存储量、存取速度、高可靠性、易扩展等多方面的因素。

1. 存储量大、种类广

对于存储量大、种类广的低层结构,NoSQL数据库是更好的选择,如MongoDB、Cassandra等。NoSQL数据库的架构特点使得其能够高效地处理大规模的数据,也能够灵活地进行非结构化和半结构化数据的存储。

2. 存取速度快

对于存取速度较快的低层结构,如金融交易数据、社交网络等,内存数据库是更好的选择,如Redis、Memcached等。内存数据库能够在大量的访问请求中提供高并发、实时响应、快速存取等功能。同时,内存数据库也适合于一些需要进行一些临时性数据的存储,比如购物车的缓存等。

3. 高可靠性

对于对可靠性要求比较高的低层结构,如电商网站的用户信息、支付信息等,关系型数据库是更好的选择,如MySQL、Oracle等。关系型数据库相对于NoSQL数据库有更好的数据一致性和可靠性保证,其ACID特性可以确保数据的安全性和完整性。

4. 易扩展

对于未来业务规模扩展需要的低层结构,需要选择易扩展的数据库。NoSQL数据库具有较好的可扩展性,可以方便地进行水平扩展,支持大量节点构建分布式系统,如Cassandra、HBase等。

四、结论

在选择何种数据库更适合低层结构时,需要根据低层结构的特点综合考虑存储量、存取速度、高可靠性、易扩展等多方面的因素。不同类型的数据库适合不同的数据类型和业务场景,需要结合实际需求进行选择。在实际应用中,也可以采用多个类型的数据库组合来存储低层结构中的数据。每种类型的数据库都有各自的优势和劣势,选择最适合低层结构的数据库可以提高数据的读写效率、保障数据的安全性和可靠性,最终实现BaaS应用的高效运作。

相关问题拓展阅读:

为什么使用Hive?Hive提供了什么?Hive支持哪些用户

为什么使用Hive?

为什么使用Hive?那么,在哪里使用Hive呢?在载入了60亿行(经度、维度、时间、数据值、高度)数据集到MySQL后,系统崩溃了,并经历过数据丢失。这可能部分是因为我们最初的策略是将所有的数据都存储到单一的一张表中了。后来,我们调整了策略通过数据集和参数进行分表,这有所帮助但也因此引入了额外的消耗,而这并非是我们愿意接受的。

相反,我们决定尝试使用Apache Hive技术。我们安装了Hive 0.5 + 20,使用CDHv3和Apache Hadoop(+ 320)。CDHv3还包含有许多其他相关工具,包括Sqoop和Hue这些在我们的架构中都标识出来了,如图23-3底部所示。

我们使用Apache Sqoop转储数据到Hive中,然后纤滑通过写一个Apache OODT包装器,来使Hive按照空间/时间约束查询数据,然后将结果提供给RCMET和其他用户(图23-2中间部分显示)。RCMES集群的完整的架构如图23- 3所示。我们有5台机器,包括图中所示的一个主/从配置,通过一个运行GigE的私人网进行连接。

Hive提供了什么

Photobucket公司使用Hive的主要目标是为业务功能、系统性能和用户行为提供答案。为了满足这些需求,我们每晚都要通过Flume从数百台服务器上的MySQL数据库中转储来自Web服务器和自定义格式日志TB级别的数据。这些数据有助于支持整个公司许多组织,比如行政管理、广告、客户支持、产品开发和操作,等等。对于历史数据,我们保持所有MySQL在每月的之一天创建的所有的毁培腊数据作为分区数据并保留30天以上的日志文件。Photobucket使用一个定制的ETL框架来将MySQL数据库中数据迁移到Hive中。使用Flume将日志文件数据写入到HDFS中并按照预定的Hive流程进行处理。

Hive支持的用户有哪些

行政管理依赖于使用Hadoop提供一般业务健康状况的报告。Hive允许我们解析结构化数据库数据和非结构化的点击流数据,以及业务所涉及的数据格式进行读取。

广告业务使用Hive筛选历史数据来对广告目标进行预测和定义配额。产品开发无疑是该组织中产生更大数量的特定的查询的用户了。对于任何用户群,时间间隔变化或随时间而变化。Hive是很重要的,因为它允许我们通过对在当前和历史数据中运行A / B测试来判断在一个快速变化的用户环境中新产品的相关特性。

在Photobucket公司中,为我们的用户提供一流的系统是最重要的目标。从操作的角度来看,Hive被用来汇总生成跨多个维度的数据。在公司里知道更流行的媒体、用户、参考域是非常重要的。控制费中租用对于任何组织都是重要的。一个用户可以快速消耗大量的系统资源,并显著增加每月的支出。Hive可以用于识别和分析出这样的恶意用户,以确定哪些是符合我们的服务条款,而哪些是不符合的。也可以使用Hive对一些操作运行A / B测试来定义新的硬件需求和生成ROI计算。Hive将用户从底层MapReduce代码解放出来的能力意味着可以在几个小时或几天内就可以获得答案,而不是之前的数周。

Hive中的数据库

Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间。然而,对于具有很多组和用户的大集群来说,这是非常有用的,因为这样可以避免表命名冲突。通常会使用数据库来将生产表组织成逻辑组。

如果用户没有显式指定数据库,那么将会使用默认的数据库default。

下面这个例子就展示了如何创建一个数据库:

hive> CREATE DATABASE financials;

如果数据库financials已经存在的话,那么将会抛出一个错误信息。使用如下语句可以避免在这种情况下抛出错误信息:

hive> CREATE DATABASE IF NOT EXISTS financials;

虽然通常情况下用户还是期望在同名数据库已经存在的情况下能够抛出警告信息的,但是IF NOT EXISTS这个子句对于那些在继续执行之前需要根据需要实时创建数据库的情况来说是非常有用的。

在所有的数据库相关的命令中,都可以使用SCHEMA这个关键字来替代关键字TABLE。

随时可以通过如下命令方式查看Hive中所包含的数据库:

hive> SHOW DATABASES;

default

financials

hive> CREATE DATABASE human_resources;

hive> SHOW DATABASES;

default

financials

human_resources

如果数据库非常多的话,那么可以使用正则表达式匹配来筛选出需要的数据库名,正则表达式这个概念,将会在第6.2.3节“Like和RLike”介绍。下面这个例子展示的是列举出所有以字母h开头,以其他字符结尾(即.*部分含义)的数据库名:

hive> SHOW DATABASES LIKE ‘h.*’;

human_resources

hive> …

Hive会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储。有一个例外就是default数据库中的表,因为这个数据库本身没有自己的目录。

数据库所在的目录位于属性hive.metastore.warehouse.dir所指定的顶层目录之后,这个配置项我们已经在前面的第2.5.1节“本地模式配置”和第2.5.2节“分布式模式和伪分布式模式配置”中进行了介绍。假设用户使用的是这个配置项默认的配置,也就是/user/hive/warehouse,那么当我们创建数据库financials时,Hive将会对应地创建一个目录/user/hive/warehouse/financials.db。这里请注意,数据库的文件目录名是以.db结尾的。

用户可以通过如下的命令来修改这个默认的位置:

hive> CREATE DATABASE financials

> LOCATION ‘/my/preferred/directory’;

用户也可以为这个数据库增加一个描述信息,这样通过DESCRIBE DATABASE 命令就可以查看到该信息。

hive> CREATE DATABASE financials

> COMMENT ‘Holds all financial tables’;

hive> DESCRIBE DATABASE financials;

financials Holds all financial tables

从上面的例子中,我们可以注意到,DESCRIEB DATABASE语句也会显示出这个数据库所在的文件目录位置路径。在这个例子中,URI格式是hdfs。如果安装的是MapR,那么这里就应该是maprfs。对于亚马逊弹性MapReduce(EMR)集群,这里应该是hdfs,但是用户可以设置hive.metastore.warehouse.dir为亚马逊S3特定的格式(例如,属性值设置为s3

前面DESCRIBE DATABASE语句的输出中,我们使用了master-server来代表URI权限,也就是说应该是由文件系统的“主节点”(例如,HDFS中运行NameNode服务的那台服务器)的服务器名加上一个可选的端口号构成的(例如,服务器名:端口号这样的格式)。如果用户执行的是伪分布式模式,那么主节点服务器名称就应该是localhost。对于本地模式,这个路径应该是一个本地路径,例如

如果这部分信息省略了,那么Hive将会使用Hadoop配置文件中的配置项fs.default.name作为master-server所对应的服务器名和端口号,这个配置文件可以在$HADOOP_HOME/conf这个目录下找到。

需要明确的是,

warehouse/financials.db是等价的,其中master-server是主节点的DNS名和可选的端口号。

为了保持完整性,当用户指定一个相对路径(例如,some/relative/path)时,对于HDFS和Hive,都会将这个相对路径放到分布式文件系统的指定根目录下(例如,

为了脚本的可移植性,通常会省略掉那个服务器和端口号信息,而只有在涉及到另一个分布式文件系统实例(包括S3存储)的时候才会指明该信息。

此外,用户还可以为数据库增加一些和其相关的键-值对属性信息,尽管目前仅有的功能就是提供了一种可以通过DESCRIBE DATABASE EXTENDED 语句显示出这些信息的方式:

hive> CREATE DATABASE financials

> WITH DBPROPERTIES (‘creator’ = ‘Mark Moneybags’, ‘date’ = ”);

hive> DESCRIBE DATABASE financials;

financials

hive> DESCRIBE DATABASE EXTENDED financials;

financials

{date=, creator=Mark Moneybags);

USE命令用于将某个数据库设置为用户当前的工作数据库,和在文件系统中切换工作目录是一个概念:

hive> USE financials;

现在,使用像SHOW TABLES这样的命令就会显示当前这个数据库下所有的表。

不幸的是,并没有一个命令可以让用户查看当前所在的是哪个数据库!幸运的是,在Hive中是可以重复使用USE…命令的,这是因为在Hive中并没有嵌套数据库的概念。

可以回想下,在第2.7.2节“变量和属性”中提到过,可以通过设置一个属性值来在提示符里面显示当前所在的数据库(Hive v0.8.0版本以及之后的版本才支持此功能):

hive> set hive.cli.print.current.db=true;

hive (financials)> USE default;

hive (default)> set hive.cli.print.current.db=false;

hive> …

最后,用户可以删除数据库:

hive> DROP DATABASE IF EXISTS financials;

IF EXISTS子句是可选的,如果加了这个子句,就可以避免因数据库finanacials不存在而抛出警告信息。

默认情况下,Hive是不允许用户删除一个包含有表的数据库的。用户要么先删除数据库中的表,然后再删除数据库;要么在删除命令的最后面加上关键字CASCADE,这样可以使Hive自行先删除数据库中的表:

hive> DROP DATABASE IF EXISTS financials CASCADE;

如果使用的是RESTRICT这个关键字而不是CASCADE这个关键字的话,那么就和默认情况一样,也就是,如果想删除数据库,那么必须先要删除掉该数据库中的所有表。

如果某个数据库被删除了,那么其对应的目录也同时会被删除。

baas低层用什么数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于baas低层用什么数据库,BaaS应用中选择何种数据库更适合低层结构?,为什么使用Hive?Hive提供了什么?Hive支持哪些用户的信息别忘了在本站进行查找喔。


数据运维技术 » BaaS应用中选择何种数据库更适合低层结构? (baas低层用什么数据库)