elasticsearch 如何与cassandra 数据库结合

elasticsearch 如何与cassandra 数据库结合,第1张

(注:keyspace是Cassandra 中最顶层的命名空间。)

现在要考虑的问题是如何转换它们,可按以下方法进行:

根据敏捷开发的相关经验,如果某事件很难或很复杂,最好将其分成多个部分,因为毕竟与MMF(Minimal Marketable Feature,最小市场化功能)之间还有一定的差距。步骤如下:

步骤1:将关系数据中的表转移到Cassandra列族(Column Families)中

步骤2:创建新的列族使所有数据无需进行JOIN等 *** 作。

步骤3:根据搜索器与查询方法的需要扩展列族。通常情况下一个搜索器或一个查询方法使用一个列族。

步骤4:根据之前的步骤修改Creators与Updater函数。不要担心保存重复数据,只要记住一点:只需考虑数据查询,忘记以前关系型数据库相关的法则。

步骤5:判断,如果没有完成,继续做步骤3与步骤4。

当咱们设计一个关系型数据库时,着手点是系统中的对象(Entities),再为对象加上属性描述,从而转换为表设计。在关系型数据库中咱们不会考虑表的行,由于肯定表的字段名称以后,数据逐行写入,数据库会管理行数据空间。数据库

宽行仍是窄行(Wild Rows or Skinny Rows)apache

但在Cassandra里,咱们必须在设计时考虑列族的行数,这取决于定义的列的数目。一般会有两种选择:数据结构

宽行(Wild Rows):在每行中包含数量巨大(一般会达到百万 级之多)的列,但只有不多的行数;less

窄行(Skinny Rows):比较像关系型数据库的使用方法,有少许较为固定的列,使用不一样、不断增长的行来存储。数据库设计

列排序(Column Sorting)ide

Cassandra不支持查询语言,也不支持查询时使用Order By对数据进行排序,排序是须要设计时考虑。在定义列族时,能够包含一个名为CompareWith的元素,这个元素决定了此列族的排序规则。Cassandra提供的排序支持如下几种数据类型,包含了字符、字节、数字和日期时间:AsciiType, BytesType, LexicalUUIDType, Integer Type, LongType, TimeUUIDType, or UTF8Typeui

设计原则(Design Principles)spa

Cassandra的数据结构设计与关系型数据库彻底不一样,核心有三大设计原则:物化视图、无值列和复合键。设计

物化视图(Materialized View)rest

在关系型数据库中,咱们一般会使用Where条件查询表的部分结果集,好比咱们设计了Users表,有一个City字段,而后使用Where City = 'New York'来进行查询。

SELECT FROM USERS WHERE CITY = "New York"

在Cassandra中,咱们会直接建立一个新的列族名为CityUsers,以City为行名称,列为全部在这个City中的Users

$ create column family CityUser;

$ set CityUsers["NewYork"]["UserID"] = "1, 2, 3, 4";

这在Cassandra里是一种很是广泛和常见的设计,物化视图为查询而设计一份映射数据,而不是从原始数据中去寻找。

无值列(Valueless Column)

以上面的Users/CityUsers为例,咱们设计了行名为City,列为Users的列族,由于数据是从Users列族中映射过来的,其实咱们并不须要为列指定内容,它能够直接引用Users表中的数据。

复合键(Aggregate Key)在《Cassandra – 理解关键概念和数据模型》为你们介绍过复合键的用法,在Cassandra中,大量使用复合键也是设计原则之一。 在设计Cassandra数据结构时,应当紧紧把握的两点:

从查询开始:Cassandra不是为对象而设计,而是为查询而设计。先看看系统中须要的查询是什么样的,再着手设计;

系统时间:由于Cassandra的列结构包含时间戳,因此你必须考虑从不一样客户端过来的时间格式,有必要指定一个统一的标准时间,固然,这将带来本地时间转换问题。

数据设计示例(Data Design Sample)

需求

查询指定地区的酒店

查询指定酒店的信息,包括名称和所在地区

查询酒店附近有趣的地点

查询指定日期区间可预订的房间

查询房间的评分

提交客户信息预订房间

关系型数据库设计

Screen Shot 2013-12-01 at 103208 AM

Cassandra数据结构设计

Screen Shot 2013-12-01 at 103412 AM

设计思路:

建立数据库结构;

建立酒店和附近场所的数据结构。酒店是普通列族,附近场所是超级列族;

查询指定地区的酒店,使用第二簇索引完成;

查询一个酒店,而后查询附近场所;

预订酒店时,向Reservation列族写入行数据。

Cassandrayaml

keyspaces:

- name: Hotelier

replica_placement_strategy: orgapachecassandralocatorRackUnawareStrategy

replication_factor: 1

column_families:

- name: Hotel

compare_with: UTF8Type

- name: HotelByCity

compare_with: UTF8Type

- name: Guest

compare_with: BytesType

- name: Reservation

compare_with: TimeUUIDType

- name: PointOfInterest

column_type: Super

compare_with: UTF8Type

compare_subcolumns_with: UTF8Type

- name: Room

column_type: Super

compare_with: BytesType

compare_subcolumns_with: BytesType

- name: RoomAvailability

column_type: Super

compare_with: BytesType

compare_subcolumns_with: BytesType

本文参考自《Cassandra: The Definitive Guide》

原文连接:Cassandra – 数据结构设计概念和原则

相关文章

1 数据库 - 概念结构设计

2 数据库设计----概念结构设计(概念模型、E—R模型、概念结构设计)

3 数据库原理 概念结构设计的方法

4 数据库原理(十 一)- 概念结构设计

5 数据库结构设计概念设计

6 数据库设计(1)_概念结构设计

7 数据库原理概念结构、逻辑结构设计案例

8 数据库原理 概念结构设计-E-R图及其设计

9 设计模式-----原则概念

10 数据库学习笔记(四)数据库设计——概念结构设计

更多相关文章

• 数据库是什么?数据库的概念 - MySQL教程

• Web 创建设计 - 网站建设指南

• TiDB 在摩拜单车在线数据业务的应用和实践

• Flink 数据传输及反压详解

常见的非关系型数据库有:1、mongodb;2、cassandra;3、redis;4、hbase;5、neo4j。其中mongodb是非常著名的NoSQL数据库,它是一个面向文档的开源数据库。

常见的几种非关系型数据库:

1、MongoDB

MongoDB是最著名的NoSQL数据库。它是一个面向文档的开源数据库。MongoDB是一个可伸缩和可访问的数据库。它在c++中。MongoDB同样可以用作文件系统。在MongoDB中,JavaScript可以作为查询语言使用。通过使用sharding MongoDB水平伸缩。它在流行的JavaScript框架中非常有用。

人们真的很享受分片、高级文本搜索、gridFS和map-reduce功能。惊人的性能和新特性使这个NoSQL数据库在我们的列表中名列第一。

特点:提供高性能;自动分片;运行在多个服务器上;支持主从复制;数据以JSON样式文档的形式存储;索引文档中的任何字段;由于数据被放置在碎片中,所以它具有自动负载平衡配置;支持正则表达式搜索;在失败的情况下易于管理。

优点:易于安装MongoDB;MongoDB Inc为客户提供专业支持;支持临时查询;高速数据库;无模式数据库;横向扩展数据库;性能非常高。

缺点:不支持连接;数据量大;嵌套文档是有限的;增加不必要的内存使用。

2、Cassandra

Cassandra是Facebook为收件箱搜索开发的。Cassandra是一个用于处理大量结构化数据的分布式数据存储系统。通常,这些数据分布在许多普通服务器上。您还可以添加数据存储容量,使您的服务保持在线,您可以轻松地完成这项任务。由于集群中的所有节点都是相同的,因此不需要处理复杂的配置。

Cassandra是用Java编写的。Cassandra查询语言(CQL)是查询Cassandra数据库的一种类似sql的语言。因此,Cassandra在最佳开源数据库中排名第二。Facebook、Twitter、思科(Cisco)、Rackspace、eBay、Twitter、Netflix等一些最大的公司都在使用Cassandra。

特点:线性可伸缩;;保持快速响应时间;支持原子性、一致性、隔离性和耐久性(ACID)等属性;使用Apache Hadoop支持MapReduce;分配数据的最大灵活性;高度可伸缩;点对点架构。

优点:高度可伸缩;无单点故障;Multi-DC复制;与其他基于JVM的应用程序紧密集成;更适合多数据中心部署、冗余、故障转移和灾难恢复。

缺点:对聚合的有限支持;不可预知的性能;不支持特别查询。

3、Redis

Redis是一个键值存储。此外,它是最著名的键值存储。Redis支持一些c++、PHP、Ruby、Python、Perl、Scala等等。Redis是用C语言编写的。此外,它是根据BSD授权的。

特点:自动故障转移;将其数据库完全保存在内存中;事务;Lua脚本;将数据复制到任意数量的从属服务器;钥匙的寿命有限;LRU驱逐钥匙;支持发布/订阅。

优点:支持多种数据类型;很容易安装;非常快(每秒执行约11万组,每秒执行约81000次); *** 作都是原子的;多用途工具(在许多用例中使用)。

缺点:不支持连接;存储过程所需的Lua知识;数据集必须很好地适应内存。

4、HBase

HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。

HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

5、neo4j

Neo4j被称为原生图数据库,因为它有效地实现了属性图模型,一直到存储层。这意味着数据完全按照白板的方式存储,数据库使用指针导航和遍历图。Neo4j有数据库的社区版和企业版。企业版包括Community Edition必须提供的所有功能,以及额外的企业需求,如备份、集群和故障转移功能。

特点:它支持唯一的约束;Neo4j支持完整的ACID(原子性、一致性、隔离性和持久性)规则;Java API: Cypher API和本机Java API;使用Apache Lucence索引;简单查询语言Neo4j CQL;包含用于执行CQL命令的UI: Neo4j Data Browser。

优点:容易检索其相邻节点或关系细节,无需连接或索引;易于学习Neo4j CQL查询语言命令;不需要复杂的连接来检索数据;非常容易地表示半结构化数据;大型企业实时应用程序的高可用性;简化的调优。

缺点:不支持分片

如果您正在尝试将dat文件导入Cassandra数据库时出现了错误 "找不到点",可能是因为导入的语法中存在一些错误或不正确的参数。以下是一些可能导致此问题的情况: 1 使用了不正确的Cassandra导入语法。确保你使用了正确的语法来导入数据,例如使用COPY语句。请注意,在Cassandra 4x中,使用“COPY FROM”语法,而在Cassandra 3x中使用“COPY TO”语法。 2 dat文件存在格式问题。如果您尝试导入的dat文件包含无效的结构或格式问题,则可能导致无法找到点的问题。确保文件格式正确,并尝试使用其他文本编辑器编辑该文件。 3 未正确配置Cassandra环境。请确认Cassandra的环境已正确配置,并且您的数据库服务器正在运行。如果无法访问Cassandra服务器,则可能会出现无法找到点的错误。 4 导入命令中出现了错误参数。请检查您COPY FROM命令的语法是否正确,包括所有参数的正确性,例如列分隔符、行分隔符、日期格式等。 5 缺少所需的文件或文件路径不正确。确保您的dat文件存在,并且可以通过正确的文件路径进行访问。如果文件路径不正确,则可能会出现找不到点的错误。 综上所述,如果您在导入dat文件时遇到找不到点的问题,请检查您的导入语法、文件格式、Cassandra环境配置、导入命令参数等方面,并对其进行逐一排查。

CASS实体代码可以通过修改程序代码或者修改配置文件来进行更改。如果是修改程序代码,需要先了解CASS的架构和代码结构,找到需要修改的代码文件,并进行相应的修改。需要注意的是修改代码可能会导致系统出现异常或者失效,因此需要谨慎 *** 作,并在修改前备份好原代码文件。如果是修改配置文件,则需要找到相应的配置文件,比如cassandrayaml等,然后修改其中的参数或者属性值,保存并重启CASS服务即可生效。需要注意的是修改配置文件也可能会对系统产生影响,因此需要仔细查看文档,了解每一个配置项的含义和作用,确保修改的设置符合实际需求。

Cassandra (Cass) 是一个分布式数据库管理系统,而 PL/SQL 是 Oracle 数据库的一种编程语言。如果你在使用 Cass 时发现它画 PL/SQL 线路太卡,可能是因为以下原因:

1 服务器负载过高:如果服务器上的 CPU、内存和磁盘资源不足,会导致 Cass 的性能下降。这将影响到画 PL/SQL 线路的速度。

2 数据库设置错误:Cass 需要正确的配置才能正常运行。如果数据库设置不正确,它可能无法快速响应请求,从而导致画 PL/SQL 线路变得缓慢。

3 查询语句设计问题:如果查询语句的设计不合理,它可能会导致过多的数据传输和处理,从而使画 PL/SQL 线路的速度变慢。

4 网络连接问题:如果服务器与客户端之间的网络连接存在问题,比如延迟或者丢包,也会导致画 PL/SQL 线路的速度下降。

为了解决这些问题,可以考虑优化服务器资源、修复数据库设置、调整查询语句和优化网络连接等方面

Apache Cassandra数据库的优缺点有哪些?

本文将超越众所周知的一些细节,探讨与 Cassandra 相关的不太明显的细节。您将检查 Cassandra 数据模型、存储模式设计、架构,以及与 Cassandra 相关的潜在惊喜。

在数据库历史文章 “What Goes Around Comes Around”中,Michal Stonebraker 详细描述了存储技术是如何随着时间的推移而发展的。实现关系模型之前,开发人员曾尝试过其他模型,比如层次图和有向图。值得注意的是,基于 SQL 的关系模型(即使到现在也仍然是事实上的标准)已经盛行了大约 30 年。鉴于计算机科学的短暂历史及其快速发展的步伐,这是一项非凡的成就。关系模型建立已久,以至于许多年来,解决方案架构师很容易为应用程序选择数据存储。他们的选择总是关系数据库。

诸如增加系统、移动设备、扩展的用户在线状态、云计算和多核系统的用户群之类的开发已经导致产生越来越多的大型系统。Google 和 Amazon 之类的高科技公司都是首批触及规模问题的公司。他们很快就发现关系数据库并不足以支持大型系统。

为了避免这些挑战,Google 和 Amazon 提出了两个可供选择的解决方案:Big Table 和 Dynamo,他们可以由此放松关系数据模型提供的保证,从而实现更高的可扩展性。Eric Brewer 的 “CAP Theorem”后来官方化了这些观察结果。它宣称,对于可扩展性系统,一致性、可用性和分区容错性都是权衡因素,因为根本不可能构建包含所有这些属性的系统。不久之后,根据 Google 和 Amazon 早期的工作,以及所获得的对可扩展性系统的理解,计划创建一种新的存储系统。这些系统被命名为 “NoSQL” 系统。该名称最初的意思是 “如果想缩放就不要使用 SQL”,后来被重新定义为 “不只是 SQL”,意思是说,除了基于 SQL 的解决方案外,还有其他的解决方案。

有许多 NoSQL 系统,而且每一个系统都缓和或改变了关系模型的某些方面。值得注意的是,没有一个 NoSQL 解决方案适用于所有的场景。每一个解决方案都优于关系模型,且针对一些用例子集进行了缩放。我的早期文章 “在 Data Storage Haystack 中为您的应用程序寻找正确的数据解决方案” 讨论了如何使应用程序需求和 NoSQL 解决方案相匹配。

Apache Cassandra是其中一个最早也是最广泛使用的 NoSQL 解决方案。本文详细介绍了 Cassandra,并指出了一些首次使用 Cassandra 时不容易发现的细节和复杂之处。

Apache Cassandra

Cassandra 是一个 NoSQL 列族 (column family) 实现,使用由 Amazon Dynamo 引入的架构方面的特性来支持 Big Table 数据模型。Cassandra 的一些优势如下所示:

高度可扩展性和高度可用性,没有单点故障

NoSQL 列族实现

非常高的写入吞吐量和良好的读取吞吐量

类似 SQL 的查询语言(从 08 起),并通过二级索引支持搜索

可调节的一致性和对复制的支持

灵活的模式

这些优点很容易让人们推荐使用 Cassandra,但是,对于开发人员来说,至关重要的一点是要深入探究 Cassandra 的细节和复杂之处,从而掌握该程序的复杂性。

什么是列?

列 有点用词不当,使用名称单元格 很可能更容易理解一些。我会坚持使用列,因为这是一种习惯用法。

Cassandra 数据模型包括列、行、列族和密钥空间 (keyspace)。让我们逐一进行详细介绍它们。

•列:Cassandra 数据模型中最基本的单元,每一个列包括一个名称、一个值和一个时间戳。在本文的讨论中,我们忽略了时间戳,您可以将一个列表示为一个名称值对(例如 author="Asimov")。

•行:用一个名称标记的列的集合。例如,清单 1 显示了如何表示一个行:

清单 1 行的示例

"Second Foundation"-> {

author="Asimov",

publishedDate="",

tag1="sci-fi", tag2="Asimov"

}

Cassandra 包括许多存储节点,并且在单个存储节点内存储每一个行。在每一行内,Cassandra 总是存储按照列名称排序的列。使用这种排序顺序,Cassandra 支持切片查询,在该查询中,给定了一个行,用户可以检索属于给定的列名称范围内的列的子集。例如,范围 tag0 到 tag9999 内的切片查询会获得所有名称范围在 tag0 和 tag9999 内的列。

•列族:用一个名称标记的行的集合。清单 2 显示了样例数据的可能形式:

清单 2 列族示例

Books->{

"Foundation"->{author="Asimov", publishedDate=""},

"Second Foundation"->{author="Asimov", publishedDate=""},

}

人们常说列族就像是关系模型中的一个表格。如下例所示,相似点将不复存在。

•密钥空间:许多列族共同形成的一个组。它只是列族的一个逻辑组合,并为名称提供独立的范围。

最后,超级列位于一个列族中,该列族对一个密钥下的多个列进行分组。正如开发人员不赞成使用超级列一样,在此,我对此也不作任何讨论。

Cassandra 与 RDBMS 数据模型

根据以上对 Cassandra 数据模型的描述,数据被放入每一个列族的二维 (2D) 空间中。要想在列族中检索数据,用户需要两个密钥:行名称和列名称。从这个意义上来说,尽管还存在多处至关重要的差异,关系模型和 Cassandra 仍然非常相似。

•关系列均匀分布在表中的所有行之间。数据项之间通常有明显的纵向关系,但这种情况并不适用于 Cassandra 列。这就是 Cassandra 使用各个数据项(列)来存储列名称的原因。

•有了关系模型,2D 数据空间就完整了。2D 空间内的每一个点至少应当拥有存储在此处的 null 值。另外,这种情况不适用于 Cassandra,Cassandra 可以拥有只包括少数项的行,而其他行可以拥有数百万个项。

•有了关系模型,就可以对模式进行预定义,而且在运行时不可以更改模式,而 Cassandra 允许用户在运行时更改模式。

•Cassandra 始终存储数据,这样就可以根据其名称对列进行排序。这使得使用切片查询在列中搜索数据变得很容易,但在行中搜索数据变得很困难,除非您使用的是保序分区程序。

•另一个重要差异是,RDMBS 中的列名称表示与数据有关的元数据,但绝不是数据。而在 Cassandra 中,列名称可以包括数据。因此,Cassandra 行可以拥有数百万个列,而关系模型通常只有数十个列。

•关系模型使用定义良好的不可变模式来支持复杂的查询,这些查询中包括 JOIN 和聚合等。使用关系模型,用户无需担心查询就可定义数据模式。Cassandra 不支持 JOIN 和大多数 SQL 搜索方法。因此,模式必须满足应用程序的查询要求。

以上就是关于elasticsearch 如何与cassandra 数据库结合全部的内容,包括:elasticsearch 如何与cassandra 数据库结合、valuelesscolumn的好坏、有哪些轻型的非关系型数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存