Difference Between `uvm_config_db` and `uvm_resource_db` in Non-Component Contexts

Hello everyone,
I have a question regarding the differences and appropriate usage contexts of uvm_config_db vs. uvm_resource_db.
My understanding so far:
Both uvm_config_db and uvm_resource_db can be used to pass configuration or handles across different parts of the testbench.
However, according to a DVCon paper I came across, only uvm_resource_db should be used in non-component scopes, such as inside sequences.

Here’s an excerpt from the paper:

Users should understand that uvm_resource_db#() commands can also store items in non-component referenced locations, such as in UVM sequences, and those items can only be retrieved using uvm_resource_db() commands.
Any resource stored with the uvm_resource_db commands that use a non-component scope cannot be retrieved using uvm_config_db commands.
The uvm_config_db API is a subset of the uvm_resource_db API.

My confusion:
Despite the above, I have seen many online examples using uvm_config_db inside non-component contexts like sequences, and it works fine in most simulators.
So, is it technically incorrect or just discouraged to use uvm_config_db in non-components?
Is there any specific task or feature that can only be accomplished using uvm_config_db or uvm_resource_db, and not the other?

I’d appreciate if someone can clarify:

  1. The major differences in behavior and capability between uvm_config_db and uvm_resource_db.
  2. Why uvm_config_db is not preferred or valid in non-component contexts as per the DVCon paper.

There are lengthy discussions on this.

The UVM has more complexity than necessary. We recommend sticking with uvm_config_db to simplify things for everyone.