Dynamic Data Store in Action: Custom Data in Optimizely? Let DDS Do the Heavy Lifting

Managing complex custom data efficiently using Optimizely Dynamic Data Store capabilities.

July 24, 2025 | 1 mins read

Blog-hero-bg4.webp
Mateen Shaikh
Mateen Shaikh
Co-Founder Techxot Software

Specializing in Sitecore solutions, DXP strategy, and digital transformation to help businesses in building scalable digital experiences.

Introduction

When building digital experiences with Optimizely, not all data fits neatly into content types. From storing user preferences to logging external API responses, there’s a growing need for flexible, non-content data storage.

That’s where the Dynamic Data Store (DDS) shines; enabling you to store and retrieve strongly typed .NET objects without the overhead of content modeling or custom database tables.

What is the Dynamic Data Store?

The Optimizely Dynamic Data Store (DDS) is essentially an Object-Relational mapper. When used with compile time data types (.NET classes), properties with a public getter and a setter (setter does not need to be public) are mapped to a column in a database table.

In Optimizely, a Property Bag is a flexible data structure used to store and pass around key-value pairs, typically for custom attributes or additional data that isn’t part of the standard model. It’s a way to represent and manage data where the type of the data is not known at compile time. For runtime data types, each property added to a Property Bag is also mapped in the same way. A class used to save and load a collection a name/value pairs.

The Dynamic Data Store is Optimizely’s built-in, schema-less storage system designed for non-content data. It serializes and stores .NET objects in the database, automatically handling schema evolution and versioning in the background.

The Optimizely Dynamic Data Store (DDS) is essentially an Object-Relational mapper. When used with compile time data types (.NET classes), properties with a public getter and a setter (setter does not need to be public) are mapped to a column in a database table. For runtime data types, each property added to a Property Bag is also mapped in the same way.

DDS is a component offering an API and infrastructure for the saving, loading, and searching of compile time data types (.NET object instances) and runtime data types (property bags) in shared tables in SQL Server. The component is shipped as part of the Framework package.

When to Use DDS?

Think fast, flexible, and user focused. DDS is your go-to when you need to store:

  • Temporary or session-based data

  • User-specific configurations

  • Integration logs

  • Lightweight data models — no publishing, no workflows, no hassle.

Real-World Scenarios

1.Storing User Preferences

Need to store personalized dashboard configurations or user-selected options? DDS makes this easy with minimal setup.

public class UserPreference
{
public Identity UserId {get; set;}
public List SelectedWidgets {get; set;}
}

No need to create new content types or custom tables — just store and retrieve as needed.

2.Logging External API Responses

When integrating with third-party services, it’s helpful to log API calls for auditing and troubleshooting. DDS provides a quick and structured way to store that data.


public class ApiLog
{
public DateTime Timestamp {get; set;}
public string Endpoint {get; set;}
public string ResponsePayload {get; set;}
}

These logs can be stored, queried, and analyzed as needed, all without touching your main content structure.

3.Caching Product Inventory

For sites that sync inventory from external systems, DDS can serve as a lightweight cache layer to store SKU and stock level data temporarily.

public class InventoryCache
{
public string Sku {get; set;}
public int StockLevel {get; set;}
public DateTime LastUpdated {get; set;}
}

This improves performance and reduces dependency on real-time API responses.

4.Handling Form Submissions and Surveys

If you’re collecting user-submitted data through surveys, polls, or custom forms, DDS offers a simple way to persist that data without requiring publishing workflows or version control.

public class SurveyResponse
{
public Guid SurveyId {get; set;}
public Identity RespondentId {get; set;}
public Dictionary<string, string> Answers {get; set;}
}

This allows developers to quickly build and iterate on forms with minimal backend setup.

Benefits of Using DDS

  • Flexible: Store any serializable .NET object without rigid schemas.

  • Schema Evolution: Automatically adapts to changes in your object structure.

  • Rapid Development: Ideal for MVPs, internal tools, and integration storage.

  • No Extra Infrastructure: Uses your existing Optimizely database.

When to Use DDS — and When Not To

Use DDS when:

  • You need quick, non-relational data storage

  • Content types are too heavyweight for the data

  • The data is short-lived or low volume

Avoid DDS when:

  • You need complex querying, relationships, or reporting

  • The data volume is very large or high frequency

  • You require workflows, versioning, or publishing

Ready to Get Started?

DDS is available by default in Optimizely Content Cloud. Start by defining your class, annotate it with [EPiServerDataStore], and begin storing your data, all in just a few lines of code.

For full technical documentation, visit:

Optimizely Developer Docs – Dynamic Data Store

Need a Faster Way to Store Custom Data?

Building personalized experiences? Connecting third-party APIs? Need flexible storage on the fly?

The Dynamic Data Store (DDS) gives you the speed and agility to build fast; without forcing content types to do all the heavy lifting.

Keep your content model clean. Let DDS handle the rest.

Let’s Discuss Your Digital Experience Goals

Contact-Form

Thank You!

Thanks for your interest in Techxot! Our team will contact you soon. We look forward to helping you reach your goals.