有很多基于Python的数据分布式存储的案例。以下是其中几个:
Apache Hadoop:Hadoop是一个基于Java的开源框架,但是它也提供了Python API。Hadoop是一个分布式存储和计算平台,用于处理大规模数据集。
Apache Spark:Spark是一个快速通用的计算引擎,可用于大规模数据处理。它支持Python语言,并提供了Python API。
Apache Cassandra:Cassandra是一个高度可伸缩的分布式数据库,具有强大的容错能力。Cassandra提供了Python驱动程序,可用于Python应用程序。
Apache HBase:HBase是一个分布式非关系型数据库,可在Hadoop集群上运行。它支持Python API。
PySpark:PySpark是Spark的Python API,它允许您使用Python编写Spark作业。
通常数据库分为关系型数据库和非关系型数据库,关系型数据库的优势到现在也是无可替代的,比如MySQL、SQLServer、Oracle、DB2、SyBase、Informix、PostgreSQL以及比较小型的Aess等等数据库,这些数据库支持复杂的SQL *** 作和事务机制,适合小量数据读写场景;但是到了大数据时代,人们更多的数据和物联网加入的数据已经超出了关系数据库的承载范围。
大数据时代初期,随着数据请求并发量大不断增大,一般都是采用的集群同步数据的方式处理,就是将数据库分成了很多的小库,每个数据库的数据内容是不变的,都是保存了源数据库的数据副本,通过同步或者异步方式保证数据的一致性,每个库设定特定的读写方式,比如主数据库负责写 *** 作,从数据库是负责读 *** 作,等等根据业务复杂程度以此类推,将业务在物理层面上进行了分离,但是这种方式依旧存在一定的负载压力的问题,企业数据在不断的扩增中,后面就采用分库分表的方式解决,对读写负载进行分离,但是这种实现依旧存在不足,且需要不断进行数据库服务器扩容。
NoSQL数据库大致分为5种类型
1、列族数据库:BigTable、HBase、Cassandra、AmazonSimpleDB、HadoopDB等,下面简单介绍几个
(1)Cassandra:Cassandra是一个列存储数据库,支持跨数据中心的数据复制。它的数据模型提供列索引,log-structured修改,支持反规范化,实体化视图和嵌入超高速缓存。
(2)HBase:ApacheHbase源于Google的Bigtable,是一个开源、分布式、面向列存储的模型。在Hadoop和HDFS之上提供了像Bigtable一样的功能。
(3)AmazonSimpleDB:AmazonSimpleDB是一个非关系型数据存储,它卸下数据库管理的工作。开发者使用Web服务请求存储和查询数据项
(4)ApacheAumulo:ApacheAumulo的有序的、分布式键值数据存储,基于Google的BigTable设计,建立在ApacheHadoop、Zookeeper和Thrift技术之上。
(5)Hypertable:Hypertable是一个开源、可扩展的数据库,模仿Bigtable,支持分片。
(6)AzureTables:WindowsAzureTableStorageService为要求大量非结构化数据存储的应用提供NoSQL性能。表能够自动扩展到TB级别,能通过REST和ManagedAPI访问。
2、键值数据库:Redis、SimpleDB、Scalaris、Memcached等,下面简单介绍几个
(1)Riak:Riak是一个开源,分布式键值数据库,支持数据复制和容错。(2)Redis:Redis是一个开源的键值存储。支持主从式复制、事务,Pub/Sub、Lua脚本,还支持给Key添加时限。
(3)Dynamo:Dynamo是一个键值分布式数据存储。它直接由亚马逊Dynamo数据库实现;在亚马逊S3产品中使用。
(4)OracleNoSQLDatabase:来自Oracle的键值NoSQL数据库。它支持事务ACID(原子性、一致性、持久性和独立性)和JSON。
(5)OracleNoSQLDatabase:具备数据备份和分布式键值存储系统。
(6)Voldemort:具备数据备份和分布式键值存储系统。
(7)Aerospike:Aerospike数据库是一个键值存储,支持混合内存架构,通过强一致性和可调一致性保证数据的完整性。
3、文档数据库:MongoDB、CouchDB、Perservere、Terrastore、RavenDB等,下面简单介绍几个
(1)MongoDB:开源、面向文档,也是当下最人气的NoSQL数据库。
(2)CounchDB:ApacheCounchDB是一个使用JSON的文档数据库,使用Javascript做MapRece查询,以及一个使用>
(3)Couchbase:NoSQL文档数据库基于JSON模型。
(4)RavenDB:RavenDB是一个基于NET语言的面向文档数据库。
(5)MarkLogic:MarkLogicNoSQL数据库用来存储基于XML和以文档为中心的信息,支持灵活的模式。
4、图数据库:Neo4J、InfoGrid、OrientDB、GraphDB,下面简单介绍几个
(1)Neo4j:Neo4j是一个图数据库;支持ACID事务(原子性、独立性、持久性和一致性)。
(2):一个图数据库用来维持和遍历对象间的关系,支持分布式数据存储。
(3):是结合使用了内存和磁盘,提供了高可扩展性,支持SPARQ、RDFS和Prolog推理。
5、内存数据网格:Hazelcast、OracleCoherence、TerracottaBigMemorry、GemFire、Infinispan、GridGain、GigaSpaces,下面简单介绍几个
(1)Hazelcast:HazelcastCE是一个开源数据分布平台,它允许开发者在数据库集群之上共享和分割数据。
(2)OracleCoherence:Oracle的内存数据网格解决方案提供了常用数据的快速访问能力,一致性支持事务处理能力和数据的动态划分。
(3)TerracottaBigMemory:来自Terracotta的分布式内存管理解决方案。这项产品包括一个Ehcache界面、Terracotta管理控制台和BigMemory-Hadoop连接器。
(4)GemFire:VmwarevFabricGemFire是一个分布式数据管理平台,也是一个分布式的数据网格平台,支持内存数据管理、复制、划分、数据识别路由和连续查询。
(5)Infinispan:Infinispan是一个基于Java的开源键值NoSQL数据存储,和分布式数据节点平台,支持事务,peer-to-peer及client/server架构。
(6)GridGain:分布式、面向对象、基于内存、SQLNoSQL键值数据库。支持ACID事务。
(7)GigaSpaces:GigaSpaces内存数据网格能够充当应用的记录系统,并支持各种各样的高速缓存场景。
Cassandra (Cass) 是一个分布式数据库管理系统,而 PL/SQL 是 Oracle 数据库的一种编程语言。如果你在使用 Cass 时发现它画 PL/SQL 线路太卡,可能是因为以下原因:
1 服务器负载过高:如果服务器上的 CPU、内存和磁盘资源不足,会导致 Cass 的性能下降。这将影响到画 PL/SQL 线路的速度。
2 数据库设置错误:Cass 需要正确的配置才能正常运行。如果数据库设置不正确,它可能无法快速响应请求,从而导致画 PL/SQL 线路变得缓慢。
3 查询语句设计问题:如果查询语句的设计不合理,它可能会导致过多的数据传输和处理,从而使画 PL/SQL 线路的速度变慢。
4 网络连接问题:如果服务器与客户端之间的网络连接存在问题,比如延迟或者丢包,也会导致画 PL/SQL 线路的速度下降。
为了解决这些问题,可以考虑优化服务器资源、修复数据库设置、调整查询语句和优化网络连接等方面
想要成为Java技术大牛并不容易,技术大牛不仅需要具备扎实的开发技能,还需要掌握开发工具和框架的使用,在开发中,工具的选择和使用是非常重要的,工具的功能不同使用的情况也不同。下面电脑培训为大家具体介绍Java软件开发必备的开发工具。
1、MongoDB
MongoDB是使用非常广泛的工具,具有跨平台和面向文档数据库等优势,是现在使用最多的一种数据库。在使用过程中,有灵活的文档模型、高可用复制集、可扩展分片集群,还能进行实时监控等相关 *** 作。IT培训认为内存使用和页面错误,复制集等与MongoDB的阴影是密不可分。
2、Elasticsearch
Elasticsearch主要是云构建分布式RESTful的搜索引擎,但是Elasticsearch不仅仅是一个全文本的搜索引擎,还是一个具有分布式实时文档存储,里面的每个数据都可以被搜索。在使用过程中,还具有分布式搜索引擎、分析引擎等实时分析功能。
3、Cassandra
Cassandra属于开源分布式数据库管理系统,Cassandra主要是使用Java编程语言进行编写的,所以在JDK6以上的版本都是可以进行使用的,使用的 *** 作命令和平时使用的一些数据库相似。北京北大青鸟认为只要是熟悉其他数据库的知识,使用Cassandra是非常容易的。
4、Redis
Redis可以进行内存数据结构存储,Redis有很多其他工具所不具备的优势,不仅可以在内存中保存数据库内容,并且所使用的磁盘具有持久性。Redis的数据类型比许多键值数据存储系统更丰富,另一个优点是Redis可以将数据复制到任何数字。
5、Hadoop
Hadoop是进行Java编写的软件框架,主要使用在分布式存储。对于非常大的数据,用户可以在不知道分布式基础的情况下进行开发分布式程序,并且能够使用集群实现高速计算和存储。在使用过程中,北大青鸟北京计算机学院认为Hadoop还能实现分布式文件系统,能够对大量的数据进行存储。
Cassandra 是一种分布式数据库管理系统,具有自动数据分片、自动数据副本和容错功能。如果想要在 Cassandra 集群中添加节点,保持面积不变的同时,可以使用以下步骤进行 *** 作:
准备好新节点的硬件设备和 Cassandra 软件。
将新节点加入集群。在 Cassandra 集群中,所有节点都是平等的,所以在新节点加入集群之前,不需要将其设置为主节点或从节点。
在新节点上启动 Cassandra 服务。在启动服务之前,需要修改 Cassandra 配置文件,使其能够连接到集群中的其他节点。
在新节点上运行 nodetool 命令,将新节点加入到已有的数据分片中。
等待数据在新节点上进行复制。在这个过程中,新节点会从集群中的其他节点复制数据,并在自己的磁盘上进行存储。
在新节点上运行 nodetool 命令,查看数据是否已经复制完成。如果复制完成,则可以在新节点上进行读写 *** 作。
如果在上述步骤中遇到问题,可以查看 Cassandra 官方文档
很多人都在知道,计算机行业的发展是非常迅速的,软件开发人员想要跟上时代的发展,最重要的就是不断挑战自己。在学习软件开发的过程,前期学习的知识是远远不够的,需要了解更多的知识,并且挑战更多的复杂性。
现在学习Java语言不能忽略工具和框架的使用,工具和框架的构建越来越复杂。很多人不知道学习工具和框架有什么用?下面昌平电脑培训为大家具体了解Java开发应该了解的大数据工具和框架。
一、MongoDB
这是一种最受欢迎的,跨平台的,面向文档的数据库。
MongoDB的核心优势是灵活的文档模型,高可用性复制集和可扩展的碎片集群。北京java培训建议可以尝试以多种方式了解MongoDB,例如MongoDB工具的实时监控,内存使用和页面错误,连接,数据库 *** 作,复制集等。
二、Elasticsearch
主要是能够为云构建的分布式RESTful搜索引擎。
Elasticsearch主要是使用在Lucene之中的服务器,能够进行分布式多用户能力的全文搜索引擎,并且还是使用在Java的开发中,这是现在很多企业中使用最流行的搜索引擎。ElasticSearch不仅是一个全文搜索引擎,而且是一个分布式实时文档存储,每个字段都能够被索引并且可以被搜索。它也是一个具有实时分析功能的分布式搜索引擎,java课程发现它还可以扩展到数百个服务器存储和处理数PB的数据。
三、Cassandra
这是一个开源的分布式数据库管理系统,最初由Facebook开发,用于处理许多商用服务器上的大量数据,提供高可用性而无单点故障。
ApacheCassandra是一套开源分布式NoSQL数据库系统。集GoogleBigTable的数据模型与AmazonDynamo的完全分布式架构于一身。于2008开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等Web20网站所采纳,成为了一种流行的分布式结构化数据存储方案。
四、Redis
开源(BSD许可证)内存数据结构存储,用作数据库,缓存和消息代理。
Redis是一个开源的,基于日志的Key-Value数据库,用ANSIC编写,支持网络,可以基于内存持久化,并提供多种语言的API。Redis有三个主要功能,北京IT培训认为可以将它与许多其他竞争对手区分开来:Redis是一个将数据完全存储在内存中的数据库,仅使用磁盘用于持久性目的。
虽然CQL和SQL他们之间有很多的不同,但是他们也有很多相类似的语法。造成这些差异的原因主要来自于Cassandra处理分布式数据并旨在防止低效查询的事实。
其中CQL与SQL一个很大不同的地方在于他们的where子句。本文的目的就是描述CQL WHERE子句所支持的内容以及与普通SQL不同的原因。
主键列
在Cassandra数据中,主键列有两种数据类型组成而且他们有着特殊的意义:分区键列(the partition key columns )和集群列(the clustering columns)。他们两组合在一起
就确定了你每行的主键(相当于mysql的主键一样)。
分区键(partition key)列是主键的第一部分,其作用是将数据均匀地分布在集群中。行将依据分区键(partition key)的hash值分布在集群周围(注:说白了就是每行的数据放在集群的哪台机器是根据partition key进行hash计算来决定的)。
聚簇列(the clustering columns)通常用于聚集分区的数据,从而可以非常有效地检索行。
由于它们扮演的角色不同,分区键,clustering和普通列在WHERE子句使用中有着不同的限制。而且,这些限制条件根据查询类型而不同:比如SELECT,UPDATE或DELETE。
SELECT语句的WHERE子句限制
分区键key的限制
分区键列仅支持两个运算符:=和IN
IN的使用限制
在22版本之前,IN只能应用到分区键的最后一个列。所以,比如,如果你的表是下面这样的话:
CREATE TABLE numberOfRequests (
cluster text,
date text,
time text,
numberOfRequests int,
PRIMARY KEY ((cluster, date), time)
)
在21版本中,您只能在date这列上使用IN运算符。在22版本中,你可以在分区键列中的任何列中使用IN运算符
最后,你的查询会像这样子:
SELECT FROM numberOfRequests
WHERE cluster IN ('cluster1', 'cluster2')
AND date = '2015-05-06'
AND time >= '12:00'
AND time <= '14:00';
这个查询从22版本开始是正确的,但是在之前的版本是错误的。
这个更新使CQL更统一了,但是你还是应该小心在分区键列使用IN运算符的限制。 Ryan Svihla的好文章会给你一个清晰的解释,告诉你为什么要尽量避免它们。
22版本引入的另一个变化是 *** 作结果不会按IN子句指定的分区键顺序返回。从22版本开始, *** 作结果以列类型的自然顺序返回而且重复值被忽略。
无限制的分区键列
Cassandra要求您要么限制所有分区键列要么一点都不限制,除非你的查询可以使用二级索引。
这意味着这个查询像这样子的:
SELECT FROM numberOfRequests WHERE cluster='cluster1' AND time ='12:00';
这个查询将会拒绝因为date这列是不受限制的。
之所以这样,是因为Cassandra需要所有的分区键列才能够计算散列,以便它能够定位包含该分区的节点。
如果没有在分区键上指定限制条件,但在集群键上指定了某些限制条件,则Cassandra将要求ALLOW FILTERING被添加到查询中。有关ALLOW FILTERING的更多信息,您应该查看ALLOW FILTERING的解释。
Cassandra distributes the partition accross the nodes using the selected partitioner 由于只有ByteOrderedPartitioner保持数据的有序分布,所以Cassandra不直接在分区键上支持>,> =,<=和<运算符。
然而,它允许您通过使用标记功能(token function)在分区键上使用>,>,<=和<运算符。
SELECT FROM numberOfRequests
如果使用ByteOrderedPartitioner,则可以在多个分区上执行一些范围查询。你应该小心,不建议使用ByteOrderedPartitioner,因为它可能会导致群集不平衡。
Clustering column的限制
Clustering column支持单列的=,IN,>,> =,<=,<,CONTAINS和CONTAINS KEY运算符以及多列的=,IN,>,> =,<=和<运算符。
clustering columns的无限制
clustering columns的作用是对分区内的数据进行群集。如果你有下面的表格:
CREATE TABLE numberOfRequests (
数据将按以下方式存储在每个分区中:
{datacenter: US_WEST_COAST {hour: 0 {minute: 0 {numberOfRequests: 130}} {minute: 1 {numberOfRequests: 125}} … {minute: 59 {numberOfRequests: 97}}} {hour: 1 {minute: 0 …
您可以看到,为了在没有二级索引的情况下以有效的方式检索数据,你需要知道你选择的所有集群键列。
所以,如果你执行下面语句:
SELECT FROM numberOfRequests
Cassandra将高效的找到上面所查询的数据,但是如果你执行的语句是下面这样的:
SELECT FROM numberOfRequests
Cassandra会拒绝上面这条语句的查询,因为它必须扫描整个分区才能找到请求的数据,效率不高(注:其实就是clustering key只能从左向右加条件且中间不能断,你可以只用给datacenter = 'US_WEST_COAST' 条件,hour和minute不给,但是你不能使用了minute字段但是没hour字段的查询)。
IN在Clustering column中的限制
在22版本之前,只有最后一个集群列(clustering columns)允许对集群列进行IN限制。在22中,IN限制可以用于任何列,下面的查询将起作用:
SELECT FROM numberOfRequests
通过使用多列IN限制( multi-column IN restriction ),可以在22版本之前检索相同的一组数据:
SELECT FROM numberOfRequests
在22中,多列IN限制可以应用于任何一组集群列。
SELECT FROM numberOfRequests
在22之前,多列IN限制只能应用于最后一组被限制的集群列。结果,以前的查询在21中是无效的。但是下面的查询是完全有效的。
SELECT FROM numberOfRequests
单列在执行范围查询的时候只能出现在查询条件的最后一栏。
因此,下面的查询是正确的:
SELECT FROM numberOfRequests
SELECT FROM numberOfRequests
SELECT FROM numberOfRequests
但是下面这条语句是不正确的:
SELECT FROM numberOfRequests
多列范围查询的时候最一组clustering columns的限制。
SELECT FROM numberOfRequests
如果你的查询是多列分片且后面一组是第一组列的子集,那么第二组的查询的列必须以第一组的第一列打头,如下面的列子:
SELECT FROM numberOfRequests
这条语句是正确的,但是下面这条是错误的:
SELECT FROM numberOfRequests
CONTAINS 和CONTAINS KEY 的使用限制
CONTAINS和CONTAINS KEY限制只能在查询使用二级索引时用于集合。
二级索引查询
对二级索引的直接查询只支持=,CONTAINS或CONTAINS KEY。
CONTAINS只能用于集合类型。 CONTAINS KEY只能用于map集合且map的key是建立了index的。
例如,你如果有这样的table:
CREATE TABLE contacts (
);
CREATE INDEX ON contacts (firstName);
CREATE INDEX ON contacts (keys(phones)); // Using the keys function to index the map keys
CREATE INDEX ON contacts (emails);
接下来的查询是生效的:
SELECT FROM contacts WHERE firstname = 'Benjamin';
SELECT FROM contacts WHERE phones CONTAINS KEY 'office';
SELECT FROM contacts WHERE emails CONTAINS ' Benjamin@oopscom ';
二级索引过滤器
二级索引查询允许您使用过滤在非索引列上使用=,>,> =,<=和<,CONTAINS和CONTAINS KEY来查询返回的结果。
因此,下面的查询是有效的,只要指定了ALLOW FILTERING:
SELECT FROM contacts
SELECT FROM contacts
WHERE phones CONTAINS KEY 'office'
AND phones CONTAINS '000000000000'
ALLOW FILTERING;
你应该谨慎的使用filtering,因为这 *** 作代价很高。
分区键上的二级索引限制
当Cassandra必须执行二级索引查询时,它将联系所有节点以检查位于每个节点上的二级索引的部分。如果所有分区键组件都受到限制,则Cassandra将使用该信息只查询包含指定分区键的节点,这将使查询更高效。
对于二级索引查询,分区键列上只支持= *** 作。
Clustering column restrictions and Secondary indices
对于每个索引值,Cassandra存储了整个主键(分区键列+集群列)的每一行包含值。当执行索引查询时,Casssandra将从索引中检索包含该值的行的主键。然后它将从表中检索行并执行所需的任何过滤。
如果第一个Clustering column已经被限制,Cassandra将对索引返回的主键执行一个过滤,使得过滤效率更高。
对于这种类型的过滤,Cassandra的 Clustering column将接受以下 *** 作:=,IN,>,> =,<=和<。
所以,如果我们将以下二级索引添加到numberOfRequests表中:
CREATE INDEX ON numberOfRequests (minute);
他下面的查询是完全有效的:
SELECT FROM numberOfRequests
WHERE子句对UPDATE和DELETE语句的限制
在UPDATE和DELETE语句中,所有主键列都必须受到限制,唯一允许的限制是:
1 单列情况 = 可以作用在任何分区键或集群列上
2单列IN 在最后一个分区键列上的限制
针对百T级别的实时数据,一些适合的数据库包括:
1 Apache Cassandra:Cassandra是一个开源的分布式NoSQL数据库,可以实现水平扩展,支持百T级别的数据存储和读取,并且具备高可用性和高性能。
2 Apache HBase:HBase是一个分布式的NoSQL数据库,特别适合存储大规模的结构化数据,并且可以提供实时读写 *** 作。它可以与Hadoop生态系统中的其他组件(如Hadoop、Hive和Pig)集成,支持海量数据的处理和分析。
3 MongoDB:MongoDB是一个基于文档的NoSQL数据库,支持高性能、高可用性和高扩展性,并且可以实现水平扩展。它还具有灵活的数据模型和强大的查询能力,适用于大规模的数据存储和处理。
4 Apache Druid:Druid是一个开源的分布式实时数据存储和查询系统,可以支持百T级别的数据存储和实时查询。它主要用于OLAP(在线分析处理)场景,可以提供快速的数据分析和查询功能。
需要注意的是,选择数据库时需要考虑到数据的类型、数据量、性能要求、数据一致性、容错性等因素,结合具体需求进行选择。
以上就是关于有没有基于Python的某某数据分布式存储的案例全部的内容,包括:有没有基于Python的某某数据分布式存储的案例、大数据常用哪些数据库(什么是大数据库)、cass画pl线太卡等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)