From the usage perspective there is no difference between these two and recommendation is to use uvm_config_db
Both uvm_config_db and uvm_resource_db share the same underlying database to store and retrieve information.
In-fact you can write a value to uvm database using uvm_config_db ::set() method and retrieve the information either using uvm_config_db ::get() method or using uvm_resource_db::read_by_name().
The recommended method is to use uvm_config_db when hierarchical access is required. When you want to share object and access it from different location without using the hierarchy you can use uvm_resource_db.
You can set a resource to the resource db using the uvm_resource_db::set() method
Example:
uvm_resource_db# (int)::set("enable","*",1,this);
To retrieve the information from the resource db you can use uvm_resource_db::read_by_name() method
Example:
Bit success;
success=uvm_resource_db#(int)::read_by_name("enable",get_full_name(),value,this);
If(success==1’b0)
`uvm_error("ERROR","cannot locate the resource ");