[Dbix-class] Multi-tennant application/data and dbix-class
Vladimir Melnik
v.melnik at uplink.ua
Wed Jan 3 23:28:45 GMT 2018
Hi,
It seems to be exactly what I has to do to construct a multi-temporal database, when I need to keep each record's history, so I don’t change a row's values (all but `known_till`), creating new records instead of that. So, the `id` is just a row's ID, but I had to add the instance's ID as `<table_name>_id`. :-)
Keeping multiple records ("known" and "forgotten" also) and using tenant's ID let me do something like that:
my @resource_pieces = $self
->mtemporal_filter(as_at => $now, all => { _rest => 0xff })
->mtemporal_update(
as_at => $now,
leave_satisfying => 1,
spawn_satisfying => 1,
yield_satisfying => 1,
record => {
valid_from
=> $record_valid_from,
valid_till
=> $record_valid_till,
parent_resource_piece_id
=> $record->{'parent_resource_piece_id'},
resource_type_id
=> $record->{'resource_type_id'},
resource_set_id
=> $record->{'resource_set_id'},
handle
=> $record->{'handle'},
description
=> $record->{'description'}
},
filter_matchings => [
qw(
resource_type_id
resource_set_id
handle
),
$description_strict ? qw(description) : qw()
],
gentle_matchings => [
qw(
valid_from
valid_till
)
]
)
->all;
^^^ the sentence above creates a new record with some values, but it does spawn a new tenant only if there are no records with the same `resource_type_id`, `resource_set_id`, `handle` and `description` (if it's been asked to). If something is already present, it clones the last state of this tenant as a new record with the same tenant ID and sets the `known_till` of the "known" rows to the current time.
id | known_from | known_till | valid_from | valid_till | resource_piece_id | other values
--- The initial state is: ---
1 | 16:20 | FOREVER | 07:40 | 13:13 | 13 | foo, bar, baz
--- At 19:40 we'd changed of a tenant having certain values (foo & bar are "matchings"): ---
1 | 16:20 | 19:40 | 07:40 | 13:13 | 13 | foo, bar, baz
2 | 16:20 | FOREVER | 07:40 | 13:13 | 13 | foo, bar, xyz
--- ^^^ So, baz had been changed to xyz, but The tenant ID has been kept the same - 13th ---
And, if it's not a secret, what's the goal that you are achieving with tenant IDs, is it same multi-temporal mania? :-)
On Wed, Jan 03, 2018 at 10:37:58PM +0200, Aaron Trevena wrote:
> Hi All,
>
> I was wondering if anyone can share any success, tips and problems of
> using dbix-class in a multi-tenant application.
>
> I'm looking at using tenant id in the main tables, and thinking best
> approach will be to add logic to a resultset base class or role to
> hook in forcing queries to restrict by tenant id, but would really
> like to hear what anybody who's done this stuff already did and what
> worked or not and any gotchas,
>
> Thanks,
>
> A.
>
> --
> Aaron J Trevena, BSc Hons
> http://www.aarontrevena.co.uk
> LAMP System Integration, Development and Consulting
>
> _______________________________________________
> List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
> IRC: irc.perl.org#dbix-class
> SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
> Searchable Archive:
> http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk
--
V.Melnik
More information about the DBIx-Class
mailing list