Flexibility without the complications Richard Banville Software Fellow OpenEdge Matthew Baker Principal Software Engineer OpenEdge Agenda 1 Administration Architecture Multitenant Administration How to ID: 594589
Download Presentation The PPT/PDF document "Multi-tenant Table Administration" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.
Slide1
Multi-tenant Table Administration
Flexibility without the complications
Richard Banville
Software Fellow, OpenEdge
Matthew Baker
Principal Software Engineer, OpenEdgeSlide2
Agenda
1
Administration Architecture
Multi-tenant Administration: How to
Utility usage examples
Database Admin Console Demo
2
3
4Slide3
Multi-tenant Identity Definitions
Tenant“Named” group of users
Share same application and data
Multi-tenancy
Deployment supporting multiple tenantsDefault tenant
Users who do not assert tenant identitySuper tenantTenant with ability to access/manage data of any tenantMulti-tenant groupMultiple tenants sharing data for a specific multi-tenant table Slide4
Multi-tenant Allocation Definitions
Table instanceDefined by a single table definition (schema)
Each
table
instance containsA
data segment for the record dataA separate data segment for each index/lob of the tableEach tenant/group has a different table instance A tenant need not instantiate every multi-tenant tableData segmentTenant/group specific chain of data for each table/index/lob (DB object)
Stored/encapsulated in its own physical data partitionPhysical data partitionManaged storage for each DB object of a multi-tenant table instance Do not span storage areas
Name index
Record Data
Record Data
Name index
Customer
Record Data
Blob Data
Name Index
Cust
-num IndexSlide5
Multi-tenant Administration
Tenant Administration
Tenants
Groups
Domains
UsersSecurity/Data AccessPerformanceMonitoringConfigurationData AdministrationTable definition
AllocationLocationMaintenanceWhat needs administration?Slide6
Physical Model
ExamplesSlide7
Physical Model By Tenant By Data And Datatype
Data
Tenancy Layer
HomeDepot
Lowes
Default
de-allocated or migrated data
Shared
Customers
Orders
Items
…
_file
_field
_tenant
state
…
Customers
Orders
Items
…
…
A7
A8
A9
A10
HD_CustOrder_Data
HD_CustOrderIdxs
HD_ItemData
HD_ItemIdxs
A11
A12
A13
A14
Lowes_CustOrder_Data
Lowes_CustOrderIdxs
Lowes_ItemData
Lowes_ItemIdxs
A15
A16
Default_Data_Area
A17
A18
Shared_Data
Shared_Indexes
Default_Index_Area
*Type II Storage Areas Slide8
Physical Model By Data and
Datatype
Data
Tenancy Layer
HomeDepot
Lowes
Default
de-allocated or migrated data
Shared
Customers
Orders
Items
…
_file
_field
_tenant
state
…
Customers
Orders
Items
…
…
Data segregation eases maintenance
Area7
Area8
CustOrder
Data
CustOrderIdxs
ItemData
ItemIdxs
A11
A12
Shared Data
Shared Indexes
Area9
Area10Slide9
Example: Adding A New Tenant “AceHardware
”
Data
Tenancy Layer
AceHardware
Shared
Customers
Orders
Items
…
A23
A24
A25
A26
Ace_CustOrder
Data
Ace_CustOrderIdxs
Ace_ItemData
Ace_ItemIdxs
Assign partition locations next
Type II Storage Areas
Tenant Access: Allowed, disallowed
Determine physical layout 1st
Create tenant w/delayed allocationSlide10
New Inventory Table With Existing Tenants
Data
Tenancy Layer
HomeDepot
Lowes
Customers
Orders
Items
…
Type II Storage Areas
A7
A8
A9
A10
HD_CustOrder_Data
HD_CustOrderIdxs
HD_ItemData
HD_ItemIdxs
A11
A12
A13
A14
Lowes_CustOrder_Data
Lowes_CustOrderIdxs
Lowes_ItemData
Lowes_ItemIdxs
Customers
Orders
Items
…
Example: Adding an Inventory tableSlide11
New Inventory Table With Existing Tenants
Data
Tenancy Layer
HomeDepot
Lowes
Customers
Orders
Items
…Type II Storage Areas
A7
A8
A9
A10
HD_CustOrder_Data
HD_CustOrderIdxs
HD_ItemData
HD_ItemIdxs
A11
A12
A13
A14
Lowes_CustOrder_Data
Lowes_CustOrderIdxs
Lowes_ItemData
Lowes_ItemIdxs
Customers
Orders
Items
…
A19
A20
HD_Inventory_Data
HD_InventoryIdxs
A21
A22
Lowes_Inventory_Data
Lowes_InvIdxs
Physical layout firstSlide12
New Inventory Table With Existing Tenants
Data
Tenancy Layer
HomeDepot
Lowes
Customers
Orders
Items
…Type II Storage Areas
A7
A8
A9
A10
HD_CustOrder_Data
HD_CustOrderIdxs
HD_ItemData
HD_ItemIdxs
A11
A12
A13
A14
Lowes_CustOrder_Data
Lowes_CustOrderIdxs
Lowes_ItemData
Lowes_ItemIdxs
Customers
Orders
Items
…
Inventory
Inventory
A19
A20
HD_Inventory_Data
HD_InventoryIdxs
A21
A22
Lowes_Inventory_Data
Lowes_InvIdxs
Define multi-tenant tableSlide13
New Inventory Table With Existing Tenants
Data
Tenancy Layer
HomeDepot
Lowes
Customers
Orders
Items
…Type II Storage Areas
A7
A8
A9
A10
HD_CustOrder_Data
HD_CustOrderIdxs
HD_ItemData
HD_ItemIdxs
A11
A12
A13
A14
Lowes_CustOrder_Data
Lowes_CustOrderIdxs
Lowes_ItemData
Lowes_ItemIdxs
Customers
Orders
Items
…
Inventory
Inventory
A19
A20
HD_Inventory_Data
HD_InventoryIdxs
A21
A22
Lowes_Inventory_Data
Lowes_InvIdxs
Tenant specific space allocation immediate or delayedSlide14
Groups
Tenants have
their own table instance
if:
Not part of a
group
Data Tenancy Layer
HomeDepot TaxCode
StateCustomers
…
Lowes TaxCode
State
Customers
…Slide15
Tenants
have their own table instance if:Not
part of a
group
Group dataShared amongst tenants in the group
Can exists with no tenants assignedFollow allocation rules already definedGroup associated with only one table instance
TaxCode_DataState_DataGroups
Data
Tenancy Layer HomeDepot
TaxCode
State
Customers
…
A30
TaxCode_Indexes
State_Indexes
TaxCodeGroup
TaxCodes
Lowes
TaxCode
State
Customers
…
StateGroup
States
A31Slide16
Tenants
have their own table instance if:Not
part of a
group
Group dataShared amongst tenants in the group
Can exists with no tenants assignedFollow allocation rules already definedGroup associated with only one table instance
TaxCode_DataState_DataGroups
Data
Tenancy Layer HomeDepot
TaxCodeGroup
StateGroup
Customers
…
A30
TaxCode_Indexes
State_Indexes
TaxCodeGroup
TaxCodes
Lowes
TaxCodeGroup
StateGroup
Customers
…
StateGroup
States
A31Slide17
I think I get it but,
what do I do to do it?Slide18
Administration mechanisms
Multi-tenant Administration
Appearance of database isolation where possible
Data Dictionary
SQL DDL Database Admin Console
Command line tools ABL administrative APIsSlide19
Multi-tenant Administration
Administration mechanisms
Database enablement (new or existing database):
proutil describe: 14 Multi-tenancy Yes Create storage areasNo new syntax to database structure files (.st)Coordinate with database designers/developersHave a plan based on physical model
Naming conventions can ease your painAppearance of database isolation where possible
Data Dictionary SQL DDL Database Admin Console
Command line tools
ABL administrative APIs
proutil <db> -C enableMultitenancy
dbutil
prostrct
add[online]
<db> <
addmt
>
.
stSlide20
Identify Multi-tenant Tables
Users
Suzi@HD_Domain
Allen@HD_Domain
Cat@HD_Domain Rich@HD_Domain
Rich@Lowes1 John@Lowes1Claudio@Lowes2 Louie@Lowes2Edward
Domains/Tenants
Name
Tenant
HD_Domain
HomeDepot
Name
Tenant
Lowes1
Lowes
Lowes2
Lowes
Name
Tenant
blank
Default
Data
Tenancy Layer
HomeDepot
Lowes
Default
de-allocated or migrated data
Shared
Customers
Orders
Items
…
_file
_field
_tenant
state
…
…
Customers
Orders
Items
…
1
2
3
0 thru 4Slide21
Object Creation Considerations w/out Tenants
Convert existing table to multi-tenant table
All
objects of table instance MUST reside in TII storage area
One way conversion
Existing data considered “Default” partitionCreate new multi-tenant tablesNo need for default partition (optional)New multi-tenant “default index” goes in same area as tableAdding new indexes with new tablesActivation state at index level, NOT tenant levelCan be changed after the fact
Schema manipulation tools such as data dictionary, SQL DDL, etcSlide22
Sequence Creation Considerations
SequencesShared or
tenant specific
Definition database wide (max/min/cycle values)
Current value tenant specific
Not group specificAvoid multi-tenant sequences for group dataGroup data is shared amongst specific tenantsSlide23
Tenant Creation
Users
Suzi@HD_Domain
Allen@HD_Domain
Cat@HD_Domain Rich@HD_Domain
Rich@Lowes1 John@Lowes1Claudio@Lowes2 Louie@Lowes2Edward
Domains/Tenants
Name
Tenant
HD_Domain
HomeDepot
Name
Tenant
Lowes1
Lowes
Lowes2
Lowes
Name
Tenant
blank
Default
Data
Tenancy Layer
HomeDepot
Lowes
Default
de-allocated or migrated data
Shared
Customers
Orders
Items
…
_file
_field
_tenant
state
…
…
Customers
Orders
Items
…
1
2
3
0 thru 4Slide24
Tenant Creation Using ABL Multi-tenant APIs
using
OpenEdge.DataAdmin
.*.
define variable service as
DataAdminService no-undo. service = new DataAdminService("demo").
define variable tenant as ITenant no-undo.define variable partition as IPartition no-undo.tenant = new Tenant("HomeDepot").assign
tenant:Type = "Regular" /* or super */ tenant:IsOnline = yes tenant:Description = "Describe HomeDepot"
tenant:DefaultDataArea = service:GetArea("Data Area") tenant:DefaultIndexArea = service:GetArea("Index Area")
tenant:DefaultLobArea = service:GetArea("Lob Area") tenant:DefaultAllocation = "Delayed". /* Immediate or None */ /* Create the tenant */
service:CreateTenant(tenant).… /* continued on next page */
Code?
Why are you showing me code?Slide25
Tenant Creation Using ABL Multi-tenant APIs
using
OpenEdge.DataAdmin
.*.
define variable service as
DataAdminService no-undo. service = new DataAdminService("demo").
define variable tenant as ITenant no-undo.define variable partition as IPartition no-undo.tenant = new Tenant("HomeDepot").assign
tenant:Type = "Regular" /* or super */ tenant:IsDataEnabled = yes tenant:Description = "Describe HomeDepot"
tenant:DefaultDataArea = service:GetArea("Data Area") tenant:DefaultIndexArea = service:GetArea("Index Area")
tenant:DefaultLobArea = service:GetArea("Lob Area") tenant:DefaultAllocation = "Delayed". /* Immediate or None */ /* Create the tenant */
service:CreateTenant(tenant).… /* continued on next page */
Set Area
Defaults
Reference
Interfaces,
ServicesSlide26
Partition Assignment
…
/* continued from previous page */
assign
partition =
tenant:Partitions:Get(service:GetTable("Customer")) partition:Area
= service:GetArea("HD CustomerArea“) partition = tenant:Partitions:Get(service:GetTable("Order")) partition:Area
= service:GetArea("HD OrderArea") partition = tenant:Partitions:Get(service:GetTable("Item")) partition:Area
= service:GetArea("HD ItemArea") partition:AllocationState = “None”.
/* Allocate Space */tenant:Allocate(). /* indicate allocation of everything in delayed state */Service:UpdateTenant(tenant).delete object service.
Allocate
Reassign partition location information
prior
to allocation.
Allocation State: Delayed or NoneSlide27
Partition Location Re-assignment
Reassign partition location
after
allocation
Table/index move
OR Dump, de-allocate, reassign via APIs/tools, reloadUsing table/index move utilitiesNew de-allocate utility (bye-bye data)Binary Dump: data is tenant indifferentDump file: <table>_<
ID>{T|G}_<tenant | group>.bd[n]Example: customer_2T_HomeDepot.bd1
proutil <db>
-C deallocate <table> tenant
<tenant>
proutil <db> -C tablemove
<table> <area>
tenant
<tenant>
proutil
<db>
-
C
dump
<table>
tenant
<tenant>
* Utilities also support “group” based operationsSlide28
Partition Location Re-assignment
Reassign partition location
after
allocation
Table/index move
OR Dump, de-allocate, reassign via APIs/tools, reloadUsing table/index move utilitiesNew de-allocate utility (bye-bye data)Binary Dump: data is tenant indifferentDump file: <table>_<
ID>{T|G}_<tenant | group>.bd[n]Example: customer_2T_HomeDepot.bd1
proutil <db>
-C deallocate <table> tenant
<tenant>
proutil <db> -C tablemove
<table> <area>
tenant
<tenant>
proutil
<db>
-
C
dump
<table>
tenant
<tenant>
* Utilities also support “group” based operationsSlide29
Partition Location Re-assignment
Reassign partition location
after
allocation
Table/index move
OR Dump, de-allocate, reassign via APIs/tools, reloadUsing table/index move utilitiesNew de-allocate utility (bye-bye data)Binary Dump: data is tenant indifferent
proutil <db> -C
deallocate <table> tenant <tenant>
proutil
<db> -C tablemove <table> <area> tenant
<tenant>
proutil
<db>
-
C
dump
<table>
tenant
<tenant>
* Utilities also support “group” based operationsSlide30
Using Domains
Users
Suzi@HD_Domain
Allen@HD_Domain
Cat@HD_Domain Rich@HD_Domain
Rich@Lowes1 John@Lowes1Claudio@Lowes2 Louie@Lowes2Edward
Domains/Tenants
Name
Tenant
HD_Domain
HomeDepot
Name
Tenant
Lowes1
Lowes
Lowes2
Lowes
Name
Tenant
blank
Default
Data
Tenancy Layer
HomeDepot
Lowes
Default
de-allocated or migrated data
Shared
Customers
Orders
Items
…
_file
_field
_tenant
state
…
…
Customers
Orders
Items
…
1
2
3
0 thru 4Slide31
Domain Creation
Domain
Tenant:
Domains ALWAYS associated w/tenants
(default, regular named tenant, super tenant)NOTE:Renaming a tenant “cascades” the rename to the domains
Renaming a domain “cascades” the rename to the users
define variable domain as IDomain no-undo.define variable cAccessCode as character init “secret-code" no-undo.domain = new Domain
("HD_Domain")assign domain:DomainType = service:GetDomainType("_oeusertable
") domain:AccessCode = cAccessCode domain:Tenant =
service:GetTenant("HomeDepot") domain:IsEnabled = yes domain:Description
= "
HomeDepot
security domain".
service:CreateDomain
(domain). Slide32
Adding Users
Users
Suzi@HD_Domain
Allen@HD_Domain
Cat@HD_Domain Rich@HD_Domain
Rich@Lowes1 John@Lowes1Claudio@Lowes2 Louie@Lowes2Edward
Domains/Tenants
Name
Tenant
HD_Domain
HomeDepot
Name
Tenant
Lowes1
Lowes
Lowes2
Lowes
Name
Tenant
blank
Default
Data
Tenancy Layer
HomeDepot
Lowes
Default
de-allocated or migrated data
Shared
Customers
Orders
Items
…
_file
_field
_tenant
state
…
…
Customers
Orders
Items
…
1
2
3
0 thru 4Slide33
User Creation
Users
D
omain Tenant
(Adding users is optional)Setting user establishes tenant identity determining data access
define variable domain as IDomain no-undo.define variable auser as IUser no-undo.
auser = new User(“fblake").assign auser:GivenName = “Frank“ auser:SurName = “Blake"
auser:Password = “HD_CEO".domain = service:GetDomain("HD_Domain").domain:Users:Add
(auser). service:UpdateDomain(domain).
User Id:Password:fblake
HD_CEO
***
Userid
/Password is incorrect.
Nothing
new hereSlide34
User Creation
Users
D
omain
Tenant (Adding users is optional)Setting user establishes tenant identity determining data access
NOTE: “Can” permissions extended to tenant qualified userid
define variable domain as IDomain no-undo.define variable auser as IUser no-undo.
auser = new User(“fblake").assign auser:GivenName = “Frank“
auser:SurName = “Blake" auser:Password = “HD_CEO".domain = service:GetDomain("
HD_Domain").domain:Users:Add(auser). service:UpdateDomain(domain).
User Id:
Password:
fblake@HD_Domain
HD_CEO
Nothing
new hereSlide35
All Done
Users
Suzi@HD_Domain
Allen@HD_Domain
Cat@HD_Domain Rich@HD_Domain
Rich@Lowes1 John@Lowes1Claudio@Lowes2 Louie@Lowes2Edward
Domains/Tenants
Name
Tenant
HD_Domain
HomeDepot
Name
Tenant
Lowes1
Lowes
Lowes2
Lowes
Name
Tenant
blank
Default
Data
Tenancy Layer
HomeDepot
Lowes
Default
de-allocated or migrated data
Shared
Customers
Orders
Items
…
_file
_field
_tenant
state
…
…
Customers
Orders
Items
…
1
2
3
0 thru 4Slide36
Group Creation
Data
Tenancy Layer
HomeDepot_NH1
Customers
…
CreditCheckGroup
Credit
HomeDepot_NH2
Customers
…
Credit Data
A300
Credit Indexes
A301
HD #2 Data Area
A200
HD #2 index Area
A201
HD #1 Data Area
A100
HD #1 index Area
A101
Type II Storage Areas Slide37
Group Creation
Data
Tenancy Layer
HomeDepot_NH1
CreditCheckGroup
Customers…
CreditCheckGroup
CreditHomeDepot_NH2
CreditCheckGroup
Customers
…
Credit Data
A300
Credit Indexes
A301
HD #2 Data Area
A200
HD #2 index Area
A201
HD #1 Data Area
A100
HD #1 index Area
A101
Type II Storage Areas Slide38
Group Creation
Data
Tenancy Layer
HomeDepot_NH1
CreditCheckGroup
HD_ItemsGroup
Customers…
CreditCheckGroup
Credit
HomeDepot_NH2
CreditCheckGroup
HD_ItemsGroup
Customers
…
HD_ItemsGroup
Items
Credit Data
HD Item Data
A300
Credit Indexes
HD Item Indexes
A301
HD #2 Data Area
A200
HD #2 index Area
A201
HD #1 Data Area
A100
HD #1 index Area
A101
Type II Storage Areas
Multiple Home Depot tenants sharing
same item list, same credit check data.Slide39
Adding Tenants To Groups
Tenant’s table instance allocated?It’s a bit more difficult.
Move or remove data from tenant’s table instance
Dump/load, buffer copy/delete via super tenant, etc
De-allocate tenant’s table instance (bye-bye data)
Add tenant as member of the group for that tableSee previous slide
proutil <db> -C deallocate <table>
[ tenant <name> |
group <name> ]Slide40
Adding More Multi-tenant Tables
Users
Suzi@HD_Domain
Allen@HD_Domain
Cat@HD_Domain Rich@HD_Domain
Rich@Lowes1 John@Lowes1Claudio@Lowes2 Louie@Lowes2Edward
Domains/Tenants
Name
Tenant
HD_Domain
HomeDepot
Name
Tenant
Lowes1
Lowes
Lowes2
Lowes
Name
Tenant
blank
Default
Data
Tenancy Layer
HomeDepot
Lowes
Default
de-allocated or migrated data
Shared
Customers
Orders
Items
…
_file
_field
_tenant
state
…
…
Customers
Orders
Items
…
1
2
3
0 thru 4Slide41
Adding A New Multi-tenant Table
Use favorite tool
DB admin tool, navigator, load .
df
Default allocation state (per tenant/group): Immediate
Creates new storage partition for each object of the table instanceAllocation performed for each tenant/groupDelayed or NoneWill not allocate any storageAllows non-default area assignment
Once tenants exist…Slide42
Adding indexes to existing tables
Activate at creationIndex wide, not tenant specific
Can
be slow to activate immediately (off-line)
Index activate online
Concurrent for different tables of same tenantConcurrent for same or different table between tenantsR-code dependenciesExisting static queries maintain but don’t use newly activated indexTenant “mixed” activation with updated r-codeIndex name is inactive and cannot be referenced. (995)
proutil
<db> -C idxactivate <index-name> [
tenant <name> | group <name>
]Slide43
Maintenance & Monitoring
ExamplesSlide44
Various Data Definition Files
Data dump
files (.d)
Output directory change only: <
tenant>/<
table>.dBinary dump files (.bd)File name format change only - <table>.bd[
n] becomes:<table>_<#>T_<tenant>.bd
[n] OR <table>_<#>G_<group>.bd[n
]customer_5T_HomeDepot.bd1 OR state_2G_itemGroup.bd1 Bulkload file definition (.fd)No change
Data definition files (.df)
ADD TABLE “Customer” MULTITENANT yes
AREA "Customer/Order Area”
Flexibility with compatibilitySlide45
Maintenance Utilities
Area and object utilities now support tenant/group keyword
Database wide utilities remain unchanged
Roll forward
Truncate bi
Backup/restore
Auditing*
Increase startup parameters to
Move
schema
Set/display create/toss limits
Index move/table move
Binary dump/load
Index check
Index rebuild
Index fix
Index compact
Index
activate
proutil
<db>
-C
dbanalys
[ area
<area>
]
[
shared
|
tenant
<name> |
group
<name>
]Slide46
Analysis Tools Report By Tenant/Group
RECORD BLOCK SUMMARY FOR SHARED OBJECTS:
-Record Size (B)-
Table Records Size Min Max Mean
PUB.state
51 1.8K 31 42 36
----------------------------------
Subtotals: 51 1.8K 31 42 36 RECORD BLOCK SUMMARY FOR GROUP HD_ItemGroup: -14
-Record Size (B)- Table Records Size Min Max Mean
PUB.item 51 2.2K 37 49 44
-----------------------------------Subtotals: 51 2.2K 37 49 44 RECORD BLOCK SUMMARY FOR TENANT HomeDepot_NH1
: 1
-Record Size (B)-
Table Records Size Min Max Mean
PUB.customer
4 280.0B 64 73 70
PUB.order
9 312.0B 34 35 34
PUB.order
-line 31 1.0K 33 34 33
---------------------------------
Subtotals: 44 593.0K 33 73 46
dbutil
<db>
-C
dbanalys
area
<area>
[
tenant
<name> |
group <name> ]Slide47
Promon: Tenant Identity, Sorting And Filtering
M. Modify DefaultsS. Sort user lists : by user Id
OR
tenant Id
T. Tenant filter for user lists : one
OR rangeUser Control:
by user number Usr:Ten Name Type
0:0 richb BROK 5:2 u2@t2 SELF/ABL 6:1 u1@t1 SELF/ABL 7:0 richb SELF/ABL
Currently Connected Tenants
Tenant Id Name User Count 0 Default 3
1 t1 1 2 t2 1
User Control:
by tenant Id
Usr:Ten
Name
Type
0:0 richb BROK
7:0 richb SELF/ABL
6:1 u1@t1 SELF/ABL
5:2 u2@t2 SELF/ABLSlide48
And now for the
Database Administration Consol
demoSlide49
Summary
Administration ArchitectureCreate tenant related stuffSelf provisioning API
Various utility usage
Multi-tenant Configuration
Tool demoSlide50
Questions
?Slide51Slide52
Physical Model By Tenant
Data
Tenancy Layer
HomeDepot
Lowes
Default
de-allocated or migrated data
Shared
Customers
Orders
Items
…
_file
_field
_tenant
state
…
Customers
Orders
Items
…
…
Type II Storage Areas
Area 7
HD
CustOrder
Data
HD
CustOrderIdxs
HD
ItemData
HD
ItemIdxs
Area
8
Lowes
CustOrder
Data
Lowes
CustOrderIdxs
Lowes
ItemData
Lowes
ItemIdxs
Area 9
Default Data Area
Default Index
A10
A11
Shared Data
Shared IndexesSlide53
Group Creation
Create the group
define variable
partitiongroup
as
IPartitionGroup no-undo.partitiongroup = new
PartitionGroup("HD_ItemsGroup“).assign partitiongroup:Table = service:GetTable("Item") partitiongroup:DefaultDataArea
= service:GetArea(“A300") partitiongroup:DefaultIndexArea = service:GetArea(“A301") partitiongroup:DefaultLobArea =
service:GetArea(“A300") partitiongroup:DefaultAllocation = "Immediate“ /* or delayed */ partitiongroup:Description = "Home Depot Items".
service:CreatePartitionGroup(partitiongroup).
Set Area
DefaultsSlide54
Adding Tenants To Groups
Table allocation state: NoneSimply add tenant as member of the group for that table
NOTE: Tenant allocation state must be “None” to join a group
define variable
partitiongroup
as
IPartitionGroup no-undo. assign partitiongroup = service:GetPartitionGroup
("HD_ItemGroup"). partitiongroup:Tenants:Add(service:GetTenant("HomeDepot_NH1")). partitiongroup:Tenants:Add(service:GetTenant
("HomeDepot_NH2")).service:UpdatePartitionGroup(partitiongroup).Slide55
Multi-tenant Model
Users
Suzi@HD_Domain
Allen@HD_Domain
Cat@HD_DomainRich@HD_Domain Rich@Lowes1
John@Lowes1Claudio@Lowes2 Louie@Lowes2Edward
Domains/Tenants
Name
TenantHD_Domain
HomeDepot
Name
Tenant
Lowes1
Lowes
Lowes2
Lowes
Name
Tenant
blank
Default
Data
Tenancy Layer
HomeDepot
Lowes
Default
de-allocated or migrated data
Shared
Customers
Orders
Items
…
_file
_field
_tenant
state
…
…
Customers
Orders
Items
…
1
2
3
0 thru 4