3. Model
■ single JSON or a model bundle
■ contains all model objects
■ full description required
4. one file or one directory bundle
✂
model
browser
formatters
http
backends
one per serving:
server
workspace
[workspace]
backend=sql
url=postgresql://localhost/database
modules
6. Backend
■ implemented as python module
with an entry point create_workspace()
■ provides Workspace and Browser
workspace represents data storage
■ only one Workspace per serving
only one kind of storage per serving
8. Model
■ composed of multiple parts
■ external model definition
provided from external source, such as analytical service
■ shared dimension descriptions
only one dimension description is necessary per composed model
9. Backend
■ heterogenous storage
multiple data stores, different types of data stores
■ different schemas in same store
■ multiple environments
dev, test, production, ...
11. Backend
■ “backend” are multiple objects:
!
|
Provider
Browser
■ better plug-in system
instead of Python module
■ more flexible composition
Store
12. Backend Objects
■ Browser – performs aggregated browsing
■ Store – maintains database connection
■ Model Provider – provides model
Note: not every kind has to be implemented
19. Store
*
■ provides database or API connection
■ might provide a model
■ slicer tool actions
physical mapping validation, model from schema generation,
schema from model generation, schema conversions and
optimization, ...
*former backend’s “Workspace” object
21. Store Methods
Store is not required to implement any
methods at this time. Future:
■ validate(cube) – does logical map to physical?
■ create(object) – create physical structure
26. SQL Backend
Mongo Backend
|
|
Snowflake Browser
Mongo Browser
SQL Store
Google Analytics Backend
|
Mongo Store
GA Model Provider
example backends
GA Browser
GA Store
27. from cubes import | AggregateBrowser,
Store
!
class
SQLStore( Store):
| default_browser_name = “sql_snowflake”
!
def __init__(self,
**options):
# initialize the store here
!
def validate_cube(self, cube):
return True # if valid
!
!
class | SQLSnowflakeBrowser(| Browser):
def __init__(self, model, locale):
# initialize the browser
!
def features(self):
# return list of browser features
def aggregate(self, cell, ...):
# return aggregation of the cell
from
slicer.ini
28. New Workspace
*
■ global object at library level
■ provides appropriate browser
■ contains run-time configuration
■ might have state persistence
*former backend Workspace is now Store