Alpha implementation persists entities and relations in Azure Table Storage. Workspace isolation via WorkspaceName (PartitionKey). Row keys are GUIDs (no reliance on names). Observations stored as a single delimited string (||).
| Properties: Id, WorkspaceName, Name, EntityType, Observations (“ | ” joined), Metadata |
PartitionKey = demo
RowKey = 5f3a2e9d2c8f4a1e9d3b2c7a5e4f1d0a
Name = Alice
EntityType = Person
Observations = Software engineer||Loves Go
Metadata = {"dept":"Engineering"}
Id = 5f3a2e9d2c8f4a1e9d3b2c7a5e4f1d0a
Stored joined by ||. On read split into list:
string.Join("||", observations)
// Read: value.Split("||", RemoveEmptyEntries)
Single partition per workspace keeps queries simple; scalability acceptable for early stage. Future optimizations may introduce composite partitioning if hot partitions emerge.
Local:
AzureWebJobsStorage=UseDevelopmentStorage=true
Production example:
AzureWebJobsStorage=DefaultEndpointsProtocol=https;AccountName=<name>;AccountKey=<key>;EndpointSuffix=core.windows.net
Use managed identity / Key Vault for secretless access (future enhancement).
PartitionKey eq '<workspace>'and Name eq '<escaped>'PartitionKey then client-side match (future: add FromEntityId indexed property query optimization){ success:false, message }Future improvements: batch APIs, observation archival, indexed queries, search entities by prefix/type, relation reverse lookups.