今天看到Doris default_db_data_quota_bytes配置项说明,没看懂。
“用于设置database data的默认quota值,单位为 bytes,默认1T”。
第一反应是Doris官方号称可以处理10PB级数据量,数据库还设置Quota上限,默认还是1TB?
代码跟官网宣传不是相互矛盾?看来只能从源码里面挖了。
在fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java文件
确实会检查数据库空间上限,超过quota会报错。
public void checkDataSizeQuota() throws DdlException {
Pair<Double, String> quotaUnitPair = DebugUtil.getByteUint(dataQuotaBytes);
String readableQuota = DebugUtil.DECIMAL_FORMAT_SCALE_3.format(quotaUnitPair.first) + " "
+ quotaUnitPair.second;
long usedDataQuota = getUsedDataQuotaWithLock();
long leftDataQuota = Math.max(dataQuotaBytes - usedDataQuota, 0);
Pair<Double, String> leftQuotaUnitPair = DebugUtil.getByteUint(leftDataQuota);
String readableLeftQuota = DebugUtil.DECIMAL_FORMAT_SCALE_3.format(leftQuotaUnitPair.first) + " "
+ leftQuotaUnitPair.second;
LOG.info("database[{}] data quota: left bytes: {} / total: {}",
fullQualifiedName, readableLeftQuota, readableQuota);
if (leftDataQuota <= 0L) {
throw new DdlException("Database[" + fullQualifiedName
+ "] data size exceeds quota[" + readableQuota + "]");
}
}
//已使用quota为所有OLAP表空间之和
public long getUsedDataQuotaWithLock() {
long usedDataQuota = 0;
readLock();
try {
for (Table table : this.idToTable.values()) {
if (table.getType() != TableType.OLAP) {
continue;
}
OlapTable olapTable = (OlapTable) table;
usedDataQuota = usedDataQuota + olapTable.getDataSize();
}
return usedDataQuota;
} finally {
readUnlock();
}
默认为1T,很不合理啊,1T数据单机Clickhouse不香吗?后者带vector处理引擎,还使用SIMD CPU指令,处理起来飞快。Doris只有收费版本才有。
网友评论