hbase中有更多列的缺点?
我已经读到,在hbase中,表中的列族不应超过2-3个。我知道要从一行中的每个列族中获取条目,我需要进行单独的扫描,但我仍然不知道如果我有更多的列族会出现什么问题hbase中有更多列的缺点?,hbase,column-family,Hbase,Column Family,我已经读到,在hbase中,表中的列族不应超过2-3个。我知道要从一行中的每个列族中获取条目,我需要进行单独的扫描,但我仍然不知道如果我有更多的列族会出现什么问题 在我的例子中,我想在hbase中存储20个大小约为10kb的图像,每个图像具有不同的维度(mxn)。所以,通常会有一个请求来获取特定维度,我需要提供该图像。因此,如果我将所有这些图像放在一个列族中,那么所有20个不同维度的图像都将不必要地加载到内存中进行缓存(如果再次请求相同的图像,则可以确定它将针对相同维度)。另一方面,如果我将保留
在我的例子中,我想在hbase中存储20个大小约为10kb的图像,每个图像具有不同的维度(mxn)。所以,通常会有一个请求来获取特定维度,我需要提供该图像。因此,如果我将所有这些图像放在一个列族中,那么所有20个不同维度的图像都将不必要地加载到内存中进行缓存(如果再次请求相同的图像,则可以确定它将针对相同维度)。另一方面,如果我将保留20个列族(每个维度一个),则只有所需的图像将加载到RAM中进行缓存。我建议尝试在同一行的不同列中存储不同的维度,每当有特定维度的请求时,只需添加所需的维度列即可。由于HBase按块()而不是单个值缓存数据,因此将缓存包含所需数据的64K块(默认情况下) 每个表有2-3个以上的列族,这将使您遇到一些性能问题,如前所述
希望这会有所帮助。不同的列指的是同一列族中的不同列?如果是,hbase会将完整的列族放入内存(缓存),不必要地,同一行中每个维度的所有我的图像都会被缓存。我在question.HBase中已经提到的问题,如果指定在创建期间将整列族放入内存,则会将其放入内存中。我以为你在问题中提到的“缓存”就是块缓存。我所说的“缓存”只是指块缓存。我能否在块缓存中仅获取列族的选定列?我认为,如果我对列族的特定列执行get调用,则整个列族都会缓存在块缓存中。不是吗?来自Hbase管理手册:Hbase支持块缓存以提高读取性能。执行扫描时,如果启用了块缓存,并且还有空间,则从HDFS上的StoreFiles读取的数据块将缓存在region server的Java堆空间中,以便下次访问同一块中的数据时,缓存的块可以提供服务。块缓存有助于减少检索数据时的磁盘I/O。因此,HBase将缓存包含请求数据的整个块。没有您请求的单个值。