cassandra - Cassandra 只是一个存储引擎吗?
问题描述
我一直在评估 Cassandra 以在我们的微服务环境中替换 MySQL,因为 MySQL 是基础架构中唯一未分布式的部分。我们的需求是写入和读取密集型的,因为它是交换原始数据的平台。一种缺乏更好描述的“公共汽车”。我们的选择相当简单,应该保持这种方式,但由于选择查询的极端限制,我已经在努力通过一些基本过滤。
例如,如果我需要过滤数据,它必须在键中。那时我无法更改字段中的数据,因为它们是键的一部分。我可以使用 SASI 索引,但如果我需要按多个字段进行过滤,我就会碰壁。希望物化视图会对此有所帮助,但在另一篇文章中,由于一些不稳定和有问题的行为,我被告知要避免使用它们。
看起来 Cassandra 擅长存储,但实际上,作为一个独立的数据库平台,除了非常基本的过滤(即单个字段)之外,作为非平凡应用程序的独立数据库平台并不好。我猜我将不得不接受另一个前沿的使用-end 像 Elastic、Solr 等。另一个选项可能是接受在应用程序逻辑中过滤数据的想法,这是可行的,只要返回的数据集保持足够小。
解决方案
Apache Cassandra 不仅仅是一个存储引擎。它的设计是一个面向提供高可用性和分区容错性的分布式数据库,如果您想要良好和可靠的性能,可能会限制查询能力。
它有一个查询引擎,CQL,功能相当强大,但在引导用户进行有效查询方面受到限制。为了有效地使用它,您需要围绕查询对表进行建模。
通常情况下,您需要以多种方式查询数据,因此用户通常会将他们的数据非规范化到多个表中。物化视图旨在改善用户体验,但正如您所指出的,它也存在一些错误和限制。在这一点上,如果你考虑使用它们,你应该意识到它们的局限性,尽管这通常是评估任何东西的好主意。
如果您需要高级查询功能或不提前了解查询内容,Cassandra 可能不适合。您可以在 Cassandra 之上使用 Spark 和 Solr 等产品构建这些功能(例如 DataStax Enterprise 所做的),但单独使用 Cassandra 可能难以实现。
另一方面,Cassandra 非常适合许多用例,例如消息传递、个性化、传感器数据等。
推荐阅读
- ios - 如何在 cocoapods 中声明 podspecs 的可选子规范依赖项
- flutter - 在 datepicker Flutter 中仅分配当前星期的天数
- python - 试图获得特定的温度范围,同时保持其他两个变量的范围
- vue.js - 子级使用与父级不同的布局
- reflection - 获取 java.lang.ClassCastException: [Ljava.lang.Integer; 不能转换为 [I
- html - text-stroke-width 和 text-stroke-color 在 gmail 模板中不起作用
- python - 从视图中的父模型获取 Django 中关联模型的更好方法
- java - Java中WeakCache的用例是什么?
- arrays - openlayers 6 如何从数组中获取文本标签的值
- python - 将多个子字符串匹配模式提取到列中