An observable data store with dirty checking