New Configurable Storage Locations For Scenario & Tag Data
Core Unlocked Package Changes
Fixed #388 (reported by @rmccu) by providing controls for how scenario & tag data is stored in Nebula Logger's data model. As the data model has grown over the last year or so, using multiple custom objects has made it easier for admins & developers to manage scenario & tag data - however, the data model does not scale well in orgs with large data volumes (LDV) of millions of records because of data skew that can happen for scenarios & tags that are heavily used.
- 🟥 Red box in the below data model: A single
LoggerScenario__c
record can end up with millions of relatedLog__c
andLogEntry__c
records - 🟩 Green box in the below data model: A single
LoggerTag__c
record can end up with millions of relatedLogEntryTag__c
junction records (that linkLoggerTag__c
toLogEntry__c
)
This type of data skew can lead to row-lock errors, increased runtimes for deleting data via LogBatchPurger
, and other types of headaches.
To help avoid these kinds of issues, orgs with large data volumes can now choose if scenario & tag data are normalized (stored in custom objects) or denormalized (stored in text fields directly on Log__c
and LogEntry__c
). This can be controlled with 2 new LoggerParameter__mdt
records (shown in the screenshot below):
- New
LoggerParameter__mdt
recordNormalizeScenarioData
- When set to
true
(default), scenario data is stored in the custom objectLoggerScenario__c
- When set to
false
, scenario data is stored in the text fieldsLog__c.TransactionScenarioName__c
andLogEntry__c.EntryScenarioName__c
- To simplify things like list views & related lists, the 2 new formula fields
Log__c.TransactionScenarioLink__c
andLogEntry__c.EntryScenarioLink__c
will handle displaying either the value of the corresponding text field or the name of the relatedLoggerScenario__c
record
- When set to
- New
LoggerParameter__mdt
recordNormalizeTagData
- When set to
true
(default), tag data is stored in the custom objectsLoggerTag__c
andLogEntryTag__c
(orTopic
andTopicAssignment
, if theLoggerParameter__mdt
recordUseTopicsForTags
is set totrue
) - When set to
false
, tag data is stored in the long text area fieldLogEntry__c.Tags__c
, and the new fieldLogEntry__c.HasInlineTags__c
is set to true (since long text area fields can't be filtered in SOQL/list views, this field helps with filtering)
- When set to
Full Changelog: v4.9.8...v4.9.9