Hello Piyush,
What is metadata?
Metadata describes data. If you’ve ever defined your own custom object or custom fields, you are probably already familiar with the concept. Say you wanted to add a field to the Account object. You would need to configure properties such as its name, data type, field length and whether or not it can be left blank. This field definition is metadata.
Custom metadata types extend this concept. In fact, the interface for creating custom metadata types and custom metadata records is almost identical to that of creating custom objects and custom object records. In Apex, custom metadata types can be treated as SObjects and respond to SOQL queries the same way SObjects would.
Custom Metadata vs Custom Objects
Custom metadata records can be queried using SOQL, but the platform internally caches the metadata records and can retrieve them more quickly than it retrieves SObject records. Querying custom metadata also doesn’t count towards SOQL limits, which is good news for performance and throughput in enterprise organizations.
Custom Metadata vs Custom Settings
Custom metadata records can be packaged, which is not the case for either custom objects or custom settings. You have greater control over the visibility of custom metadata types; you can hide the custom metadata types themselves or just hide specific records. You can also control whether or not users can update record values on a field by field basis.
These are major selling points for adopting custom metadata types. Package developers often want to ship default records with their managed packages. Prior to custom metadata types, they would have spent considerable development effort writing post-install scripts to create the data. They would also have to ensure the application coped gracefully with the data not existing; either because it hasn’t yet been created or because a user deleted it.
Custom metadata records can also be pushed from sandboxes to production orgs via changesets. This allows you to follow platform best practices; testing out changes in a sandbox before migrating them via changesets into the production org.
Hope it helps 🙂