Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hbase中有更多列的缺点?_Hbase_Column Family - Fatal编程技术网

hbase中有更多列的缺点?

hbase中有更多列的缺点?,hbase,column-family,Hbase,Column Family,我已经读到,在hbase中,表中的列族不应超过2-3个。我知道要从一行中的每个列族中获取条目,我需要进行单独的扫描,但我仍然不知道如果我有更多的列族会出现什么问题 在我的例子中,我想在hbase中存储20个大小约为10kb的图像,每个图像具有不同的维度(mxn)。所以,通常会有一个请求来获取特定维度,我需要提供该图像。因此,如果我将所有这些图像放在一个列族中,那么所有20个不同维度的图像都将不必要地加载到内存中进行缓存(如果再次请求相同的图像,则可以确定它将针对相同维度)。另一方面,如果我将保留

我已经读到,在hbase中,表中的列族不应超过2-3个。我知道要从一行中的每个列族中获取条目,我需要进行单独的扫描,但我仍然不知道如果我有更多的列族会出现什么问题


在我的例子中,我想在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将缓存包含请求数据的整个块。没有您请求的单个值。