📅  最后修改于: 2023-12-03 15:29:56.862000             🧑  作者: Mango
Cassandra 是现代分布式 NoSQL 数据库,它被广泛地应用于海量数据存储和高扩展性。
在 Cassandra 面试中,下面是一些通用问题:
主要需注意以下事项:
- 把多对多关系转换为单独的表。
- 最小化表之间的关系。
- 必须对查询正确地选择分区键和集群列。
- 了解表的一致性,即可用基本表决点和复制因子的概念。
- Partition key: 它是用于分区数据,提高查询效率,保障一致性和可用性的关键组件。通俗的说,把数据分散到多个节点去存储,而数据的所在的节点是由Partition key来决定的。
- Clustering columns: 它也是组合的一部分,同样有助于查询过程中的性能。在查询时,用【where条件】描述集群列的值范围来限制返回的结果集。
热点分区通常是由于分区键过于局限而导致的。避免热点分区的常规策略如下:
- 使用复合分区键,把表格更细致化,这样可以提供更好的负载平衡。
- 使用随机分布键值,例如使用timeuuid(),而不是整型或者字符串。这会让数据在不同分区键之间均匀地分布。
Cassandra 查询通过Indexed column 查询,对于数据量超过 1w 的数据,Cassandra 会优先使用 `Allow Filtering` 来避免全集合扫描。如果需要修改选择范围,可以定义索引。
- Where 查询: 通常用于选择静态数据。
- Multi-partition 查询: 多个分区可以一次查询,针对更加大型的数据集。
- Conditional updates: 允许用户在写入数据之前添加一个条件语句,以确保只有符合该条件才能写入。
- Batchable commands: 使用 Cassandra 批处理工具将查询组合为一组。
- 基础类型:Double、Float、Int、Decimal、BigInt、UUID。
- 枚举类型。
- 时间类型:Timestamp、TimeUUID等。
- 集合类型:Map、Set、List等。
- 自定义类型Custom Types。
Cassandra 的本地文件存储格式是 SSTables,也就是 Sorted String Tables,它是单向链接表的一种存储方式。SSTables 的优点是它可以在合适的时间点刷写到硬盘中,以进行内存泄漏的处理。这样一方面避免了系统缺少内存容量,另一方面在崩溃时也可以从稳定的磁盘存储中恢复。在 SSTables 中,数据被分段或者分块存储,在每个数据段或者数据块中使用不同的索引来访问。
Cassandra 采用了多副本复制策略,通过增加数据副本保证数据的容错能力和性能。具体来说,复制分为同一数据中心和不同数据中心的分别复制,每个 replica 节点都有权对片副本进行读取和写入。
- 由于不同的修改,可能会造成同一个 row(行)拆分成多个 sstable,而这会导致性能问题。出于性能和可维护性的考虑,Cassandra 定期执行基于时间和磁盘使用率的“compaction”操作,以确保不同修改的数据都已经合并到一起,从而减少 sstable 的数量和大小。
- 使用 Partition key 查询避免集群数据扫描。
- 一次性请求多个分区把业务模块中多个读请求合并拍平。
- 可以选择压缩数据包提高传输效率。
- 提高节点间连接速度,如使用Infiniband或者高速网卡连接。
- 尽量避免大量小写请求产生批处理。
- 使用异步客户端应用程序处理插入操作可以提高性能, 如提高查询并发度。
- 提高硬盘读写速度,使用更快的 SSD。
- 增加 Cassandra 节点可以提高写性能和负载平衡。
以上仅是一些 Cassandra 面试常见问题和答案。但是要注意,每个公司的技术面试问题以及答案都可能不同。公司招聘人员希望找到与其业务匹配的候选人,因此,建议在面试前深入了解公司的业务和技术,以确保您已经为面试做好了充分准备。