我是新手,尝试理解数据持久化和检索的各种方式。我了解Parquet和HBase都是基于列的存储格式,但Parquet是面向文件的存储方式,而不像HBase是一个数据库。
我的问题是:
- 在什么情况下使用Parquet而不是HBase?
- 是否有使用情景可以将Parquet与HBase一起使用?
- 在执行连接操作时,Parquet是否比HBase更高效(例如通过Phoenix这样的SQL皮肤访问)?
我是新手,尝试理解数据持久化和检索的各种方式。我了解Parquet和HBase都是基于列的存储格式,但Parquet是面向文件的存储方式,而不像HBase是一个数据库。
我的问题是:
正如您在问题中已经提到的,parquet是一种存储格式,而HBase是一种存储(HDFS)+查询引擎(API/shell)。因此,应该对parquet + Impala / Hive / Spark和HBase进行有效比较。以下是主要区别 -
1)磁盘空间 - 相较于HBase,Parquet占用更少的磁盘空间。 Parquet编码比HBase块压缩节省更多的空间。
2)数据摄入 - parquet中的数据摄入比HBase更加高效。一个简单的原因可能是点1。因为在parquet的情况下,需要写入磁盘的数据较少。
3)按键查找记录 - HBase更快,因为这是一种键值存储,而parquet不是。在未来版本中,parquet将支持索引。
4)过滤和其他扫描查询 - 由于parquet存储了关于行组中存储的记录的更多信息,它可以在扫描数据时跳过很多记录。这就是为什么它比HBase更快的原因。
5)更新记录 - HBase提供记录更新,而parquet可能会存在问题,因为需要重新编写parquet文件。仔细设计模式和分区可能会改善更新,但与HBase不可比较。
通过比较上述功能,HBase似乎更适用于需要更新且查询主要涉及键值查找的情况。涉及键范围扫描的查询在HBase中也会有更好的性能。
Parquet适用于那些更新很少且查询需要过滤、连接和聚合的用例。