Need help in database design
Hii Community,
I need to provide a support for some functionality for my application for
that I need to store 50 key value pair set, so I am in a dilemma, weather I
create 50 new columns of int2 data type each column will contain value of a
specific key or should I go with JSONB data type with 50 key value pair,
the table on which I am going to do that all contains 1 Billion rows of
data and have 84 hash partitions, I have gone through multiple articles
some of them mentioned it's a good approach to create 50 new columns and
some states that creating one JSONB would be best that's why I need your
help to move forward, also I am ready to make H-Store instead of JSONB if
it provides better performance.
Please help me to comes out from that dilemma.
Regards,
Divyansh Gupta,
Database Administrator
On 12/23/24 07:53, Divyansh Gupta JNsThMAudy wrote:
Hii Community,
I need to provide a support for some functionality for my application
for that I need to store 50 key value pair set, so I am in a dilemma,
weather I create 50 new columns of int2 data type each column will
This is unclear, I am trying to figure out you go from '50 key value
pair set' to '50 new columns of int2'.
In other words how 50 pairs turn into 50 columns?
Then there is the question of why 50 keys per row in the first place?
contain value of a specific key or should I go with JSONB data type with
50 key value pair, the table on which I am going to do that all contains
1 Billion rows of data and have 84 hash partitions, I have gone through
multiple articles some of them mentioned it's a good approach to create
50 new columns and some states that creating one JSONB would be best
that's why I need your help to move forward, also I am ready to make
H-Store instead of JSONB if it provides better performance.
Please help me to comes out from that dilemma.Regards,
Divyansh Gupta,
Database Administrator
--
Adrian Klaver
adrian.klaver@aklaver.com
As per the discussion with other team members they suggested if we store 50
values for keys in an individual column that will provide better
performance as the data type is native (INT2) on the other hand if we store
all the key value pair in a single JSONB column the performance will
degrade even after applying a GIN index on that however the statement
sounds funny but I want to take everyone openion?
On Mon, 23 Dec 2024, 10:05 pm Adrian Klaver, <adrian.klaver@aklaver.com>
wrote:
Show quoted text
On 12/23/24 07:53, Divyansh Gupta JNsThMAudy wrote:
Hii Community,
I need to provide a support for some functionality for my application
for that I need to store 50 key value pair set, so I am in a dilemma,
weather I create 50 new columns of int2 data type each column willThis is unclear, I am trying to figure out you go from '50 key value
pair set' to '50 new columns of int2'.In other words how 50 pairs turn into 50 columns?
Then there is the question of why 50 keys per row in the first place?
contain value of a specific key or should I go with JSONB data type with
50 key value pair, the table on which I am going to do that all contains
1 Billion rows of data and have 84 hash partitions, I have gone through
multiple articles some of them mentioned it's a good approach to create
50 new columns and some states that creating one JSONB would be best
that's why I need your help to move forward, also I am ready to make
H-Store instead of JSONB if it provides better performance.
Please help me to comes out from that dilemma.Regards,
Divyansh Gupta,
Database Administrator--
Adrian Klaver
adrian.klaver@aklaver.com
Also as you ask how 50 pairs turns into 50 column so each column will be a
key and the value of that key will store inside their respective column for
each row
On Mon, 23 Dec 2024, 10:14 pm Divyansh Gupta JNsThMAudy, <
ag1567827@gmail.com> wrote:
Show quoted text
As per the discussion with other team members they suggested if we store
50 values for keys in an individual column that will provide better
performance as the data type is native (INT2) on the other hand if we store
all the key value pair in a single JSONB column the performance will
degrade even after applying a GIN index on that however the statement
sounds funny but I want to take everyone openion?On Mon, 23 Dec 2024, 10:05 pm Adrian Klaver, <adrian.klaver@aklaver.com>
wrote:On 12/23/24 07:53, Divyansh Gupta JNsThMAudy wrote:
Hii Community,
I need to provide a support for some functionality for my application
for that I need to store 50 key value pair set, so I am in a dilemma,
weather I create 50 new columns of int2 data type each column willThis is unclear, I am trying to figure out you go from '50 key value
pair set' to '50 new columns of int2'.In other words how 50 pairs turn into 50 columns?
Then there is the question of why 50 keys per row in the first place?
contain value of a specific key or should I go with JSONB data type
with
50 key value pair, the table on which I am going to do that all
contains
1 Billion rows of data and have 84 hash partitions, I have gone through
multiple articles some of them mentioned it's a good approach to create
50 new columns and some states that creating one JSONB would be best
that's why I need your help to move forward, also I am ready to make
H-Store instead of JSONB if it provides better performance.
Please help me to comes out from that dilemma.Regards,
Divyansh Gupta,
Database Administrator--
Adrian Klaver
adrian.klaver@aklaver.com
On 12/23/24 08:46, Divyansh Gupta JNsThMAudy wrote:
Also as you ask how 50 pairs turns into 50 column so each column will be
a key and the value of that key will store inside their respective
column for each row
My problem with understanding this is 50 pairs = 100 values, I don't
understand how that can fit in 50 columns that can only handle 1 value
each. You need to provide some example data showing what you want to
achieve. It does not need to be the full 50, just something to show the
process.
On Mon, 23 Dec 2024, 10:14 pm Divyansh Gupta JNsThMAudy,
<ag1567827@gmail.com <mailto:ag1567827@gmail.com>> wrote:As per the discussion with other team members they suggested if we
store 50 values for keys in an individual column that will provide
better performance as the data type is native (INT2) on the other
hand if we store all the key value pair in a single JSONB column the
performance will degrade even after applying a GIN index on that
however the statement sounds funny but I want to take everyone openion?On Mon, 23 Dec 2024, 10:05 pm Adrian Klaver,
<adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>> wrote:On 12/23/24 07:53, Divyansh Gupta JNsThMAudy wrote:
Hii Community,
I need to provide a support for some functionality for my
application
for that I need to store 50 key value pair set, so I am in a
dilemma,
weather I create 50 new columns of int2 data type each column
will
This is unclear, I am trying to figure out you go from '50 key
value
pair set' to '50 new columns of int2'.In other words how 50 pairs turn into 50 columns?
Then there is the question of why 50 keys per row in the first
place?contain value of a specific key or should I go with JSONB
data type with
50 key value pair, the table on which I am going to do that
all contains
1 Billion rows of data and have 84 hash partitions, I have
gone through
multiple articles some of them mentioned it's a good approach
to create
50 new columns and some states that creating one JSONB would
be best
that's why I need your help to move forward, also I am ready
to make
H-Store instead of JSONB if it provides better performance.
Please help me to comes out from that dilemma.Regards,
Divyansh Gupta,
Database Administrator--
Adrian Klaver
adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>
--
Adrian Klaver
adrian.klaver@aklaver.com
On Mon, Dec 23, 2024, 09:54 Adrian Klaver <adrian.klaver@aklaver.com> wrote:
On 12/23/24 08:46, Divyansh Gupta JNsThMAudy wrote:
Also as you ask how 50 pairs turns into 50 column so each column will be
a key and the value of that key will store inside their respective
column for each rowMy problem with understanding this is 50 pairs = 100 values, I don't
understand how that can fit in 50 columns that can only handle 1 value
each. You need to provide some example data showing what you want to
achieve. It does not need to be the full 50, just something to show the
process.
Because the column name is the same as a dictionary key...
David J.
Show quoted text
On 12/23/24 08:55, David G. Johnston wrote:
On Mon, Dec 23, 2024, 09:54 Adrian Klaver <adrian.klaver@aklaver.com
<mailto:adrian.klaver@aklaver.com>> wrote:On 12/23/24 08:46, Divyansh Gupta JNsThMAudy wrote:
Also as you ask how 50 pairs turns into 50 column so each column
will be
a key and the value of that key will store inside their respective
column for each rowMy problem with understanding this is 50 pairs = 100 values, I don't
understand how that can fit in 50 columns that can only handle 1 value
each. You need to provide some example data showing what you want to
achieve. It does not need to be the full 50, just something to show the
process.Because the column name is the same as a dictionary key...
Aah, got it thanks.
David J.
--
Adrian Klaver
adrian.klaver@aklaver.com
Sure , for example, I have 50 key with name as t1 , t2 ,t3 .......t50
Now each key could have values from 0 to 3
So let suppose we have JSONB like that for row r1
{
t1: 1
t2: 2
t3 : 3
}
As if I convert it into columns so r1 will have
t1 column will contain 1
t2 column will contain 2
...... So on
So here my question is considering one JSONB column is perfect or
considering 50 columns will be more optimised.
On Mon, 23 Dec 2024, 10:24 pm Adrian Klaver, <adrian.klaver@aklaver.com>
wrote:
Show quoted text
On 12/23/24 08:46, Divyansh Gupta JNsThMAudy wrote:
Also as you ask how 50 pairs turns into 50 column so each column will be
a key and the value of that key will store inside their respective
column for each rowMy problem with understanding this is 50 pairs = 100 values, I don't
understand how that can fit in 50 columns that can only handle 1 value
each. You need to provide some example data showing what you want to
achieve. It does not need to be the full 50, just something to show the
process.On Mon, 23 Dec 2024, 10:14 pm Divyansh Gupta JNsThMAudy,
<ag1567827@gmail.com <mailto:ag1567827@gmail.com>> wrote:As per the discussion with other team members they suggested if we
store 50 values for keys in an individual column that will provide
better performance as the data type is native (INT2) on the other
hand if we store all the key value pair in a single JSONB column the
performance will degrade even after applying a GIN index on that
however the statement sounds funny but I want to take everyoneopenion?
On Mon, 23 Dec 2024, 10:05 pm Adrian Klaver,
<adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>>wrote:
On 12/23/24 07:53, Divyansh Gupta JNsThMAudy wrote:
Hii Community,
I need to provide a support for some functionality for my
application
for that I need to store 50 key value pair set, so I am in a
dilemma,
weather I create 50 new columns of int2 data type each column
will
This is unclear, I am trying to figure out you go from '50 key
value
pair set' to '50 new columns of int2'.In other words how 50 pairs turn into 50 columns?
Then there is the question of why 50 keys per row in the first
place?contain value of a specific key or should I go with JSONB
data type with
50 key value pair, the table on which I am going to do that
all contains
1 Billion rows of data and have 84 hash partitions, I have
gone through
multiple articles some of them mentioned it's a good approach
to create
50 new columns and some states that creating one JSONB would
be best
that's why I need your help to move forward, also I am ready
to make
H-Store instead of JSONB if it provides better performance.
Please help me to comes out from that dilemma.Regards,
Divyansh Gupta,
Database Administrator--
Adrian Klaver
adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>--
Adrian Klaver
adrian.klaver@aklaver.com
How do you uniquely reference each set of 50 k/v pairs?
On Mon, Dec 23, 2024 at 12:01 PM Divyansh Gupta JNsThMAudy <
ag1567827@gmail.com> wrote:
Sure , for example, I have 50 key with name as t1 , t2 ,t3 .......t50
Now each key could have values from 0 to 3
So let suppose we have JSONB like that for row r1
{
t1: 1
t2: 2
t3 : 3
}
As if I convert it into columns so r1 will have
t1 column will contain 1
t2 column will contain 2
...... So on
So here my question is considering one JSONB column is perfect or
considering 50 columns will be more optimised.On Mon, 23 Dec 2024, 10:24 pm Adrian Klaver, <adrian.klaver@aklaver.com>
wrote:On 12/23/24 08:46, Divyansh Gupta JNsThMAudy wrote:
Also as you ask how 50 pairs turns into 50 column so each column will
be
a key and the value of that key will store inside their respective
column for each rowMy problem with understanding this is 50 pairs = 100 values, I don't
understand how that can fit in 50 columns that can only handle 1 value
each. You need to provide some example data showing what you want to
achieve. It does not need to be the full 50, just something to show the
process.On Mon, 23 Dec 2024, 10:14 pm Divyansh Gupta JNsThMAudy,
<ag1567827@gmail.com <mailto:ag1567827@gmail.com>> wrote:As per the discussion with other team members they suggested if we
store 50 values for keys in an individual column that will provide
better performance as the data type is native (INT2) on the other
hand if we store all the key value pair in a single JSONB column the
performance will degrade even after applying a GIN index on that
however the statement sounds funny but I want to take everyoneopenion?
On Mon, 23 Dec 2024, 10:05 pm Adrian Klaver,
<adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>>wrote:
On 12/23/24 07:53, Divyansh Gupta JNsThMAudy wrote:
Hii Community,
I need to provide a support for some functionality for my
application
for that I need to store 50 key value pair set, so I am in a
dilemma,
weather I create 50 new columns of int2 data type each column
will
This is unclear, I am trying to figure out you go from '50 key
value
pair set' to '50 new columns of int2'.In other words how 50 pairs turn into 50 columns?
Then there is the question of why 50 keys per row in the first
place?contain value of a specific key or should I go with JSONB
data type with
50 key value pair, the table on which I am going to do that
all contains
1 Billion rows of data and have 84 hash partitions, I have
gone through
multiple articles some of them mentioned it's a good approach
to create
50 new columns and some states that creating one JSONB would
be best
that's why I need your help to move forward, also I am ready
to make
H-Store instead of JSONB if it provides better performance.
Please help me to comes out from that dilemma.Regards,
Divyansh Gupta,
Database Administrator--
Adrian Klaver
adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>--
Adrian Klaver
adrian.klaver@aklaver.com
--
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!
On 12/23/24 09:01, Divyansh Gupta JNsThMAudy wrote:
Sure , for example, I have 50 key with name as t1 , t2 ,t3 .......t50
Now each key could have values from 0 to 3
So let suppose we have JSONB like that for row r1
{
t1: 1
t2: 2
t3 : 3
}
As if I convert it into columns so r1 will have
t1 column will contain 1
t2 column will contain 2
...... So on
So here my question is considering one JSONB column is perfect or
considering 50 columns will be more optimised.
1) How are you going to use the key:value pairs in queries?
2) I would recommend creating a sample dataset that you import into
tables that are built with either the column method or the JSON method
and test a representative set of queries.
--
Adrian Klaver
adrian.klaver@aklaver.com
Each row have a PK (gdid) that will uniquely refrence 50 k/v pair set
On Mon, 23 Dec 2024, 10:35 pm Ron Johnson, <ronljohnsonjr@gmail.com> wrote:
Show quoted text
How do you uniquely reference each set of 50 k/v pairs?
On Mon, Dec 23, 2024 at 12:01 PM Divyansh Gupta JNsThMAudy <
ag1567827@gmail.com> wrote:Sure , for example, I have 50 key with name as t1 , t2 ,t3 .......t50
Now each key could have values from 0 to 3
So let suppose we have JSONB like that for row r1
{
t1: 1
t2: 2
t3 : 3
}
As if I convert it into columns so r1 will have
t1 column will contain 1
t2 column will contain 2
...... So on
So here my question is considering one JSONB column is perfect or
considering 50 columns will be more optimised.On Mon, 23 Dec 2024, 10:24 pm Adrian Klaver, <adrian.klaver@aklaver.com>
wrote:On 12/23/24 08:46, Divyansh Gupta JNsThMAudy wrote:
Also as you ask how 50 pairs turns into 50 column so each column will
be
a key and the value of that key will store inside their respective
column for each rowMy problem with understanding this is 50 pairs = 100 values, I don't
understand how that can fit in 50 columns that can only handle 1 value
each. You need to provide some example data showing what you want to
achieve. It does not need to be the full 50, just something to show the
process.On Mon, 23 Dec 2024, 10:14 pm Divyansh Gupta JNsThMAudy,
<ag1567827@gmail.com <mailto:ag1567827@gmail.com>> wrote:As per the discussion with other team members they suggested if we
store 50 values for keys in an individual column that will provide
better performance as the data type is native (INT2) on the other
hand if we store all the key value pair in a single JSONB columnthe
performance will degrade even after applying a GIN index on that
however the statement sounds funny but I want to take everyoneopenion?
On Mon, 23 Dec 2024, 10:05 pm Adrian Klaver,
<adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>>wrote:
On 12/23/24 07:53, Divyansh Gupta JNsThMAudy wrote:
Hii Community,
I need to provide a support for some functionality for my
application
for that I need to store 50 key value pair set, so I am in a
dilemma,
weather I create 50 new columns of int2 data type each
column
will
This is unclear, I am trying to figure out you go from '50 key
value
pair set' to '50 new columns of int2'.In other words how 50 pairs turn into 50 columns?
Then there is the question of why 50 keys per row in the first
place?contain value of a specific key or should I go with JSONB
data type with
50 key value pair, the table on which I am going to do that
all contains
1 Billion rows of data and have 84 hash partitions, I have
gone through
multiple articles some of them mentioned it's a good
approach
to create
50 new columns and some states that creating one JSONB would
be best
that's why I need your help to move forward, also I am ready
to make
H-Store instead of JSONB if it provides better performance.
Please help me to comes out from that dilemma.Regards,
Divyansh Gupta,
Database Administrator--
Adrian Klaver
adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>--
Adrian Klaver
adrian.klaver@aklaver.com--
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!
On Mon, Dec 23, 2024, 10:01 Divyansh Gupta JNsThMAudy <ag1567827@gmail.com>
wrote:
So here my question is considering one JSONB column is perfect or
considering 50 columns will be more optimised.
The relational database engine is designed around the column-based
approach. Especially if the columns are generally unchanging, combined
with using fixed-width data types.
David J.
On 12/23/24 09:07, Divyansh Gupta JNsThMAudy wrote:
Each row have a PK (gdid) that will uniquely refrence 50 k/v pair set
Are the 50 key/value pairs there to just define a PK or are they going
to be used in some other combination in queries?
--
Adrian Klaver
adrian.klaver@aklaver.com
As I expected.
Next:
1) Will all 50 of those k/v pairs be populated when you insert the record?
2) Will there be updates?
3) In each row, will some of those 50 pairs stay empty?
4) When querying a row, will the app care about all 50 k/v pairs at the
same time, or just one -- or even some -- of them?
On Mon, Dec 23, 2024 at 12:07 PM Divyansh Gupta JNsThMAudy <
ag1567827@gmail.com> wrote:
Each row have a PK (gdid) that will uniquely refrence 50 k/v pair set
On Mon, 23 Dec 2024, 10:35 pm Ron Johnson, <ronljohnsonjr@gmail.com>
wrote:How do you uniquely reference each set of 50 k/v pairs?
On Mon, Dec 23, 2024 at 12:01 PM Divyansh Gupta JNsThMAudy <
ag1567827@gmail.com> wrote:Sure , for example, I have 50 key with name as t1 , t2 ,t3 .......t50
Now each key could have values from 0 to 3
So let suppose we have JSONB like that for row r1
{
t1: 1
t2: 2
t3 : 3
}
As if I convert it into columns so r1 will have
t1 column will contain 1
t2 column will contain 2
...... So on
So here my question is considering one JSONB column is perfect or
considering 50 columns will be more optimised.On Mon, 23 Dec 2024, 10:24 pm Adrian Klaver, <adrian.klaver@aklaver.com>
wrote:On 12/23/24 08:46, Divyansh Gupta JNsThMAudy wrote:
Also as you ask how 50 pairs turns into 50 column so each column will
be
a key and the value of that key will store inside their respective
column for each rowMy problem with understanding this is 50 pairs = 100 values, I don't
understand how that can fit in 50 columns that can only handle 1 value
each. You need to provide some example data showing what you want to
achieve. It does not need to be the full 50, just something to show the
process.On Mon, 23 Dec 2024, 10:14 pm Divyansh Gupta JNsThMAudy,
<ag1567827@gmail.com <mailto:ag1567827@gmail.com>> wrote:As per the discussion with other team members they suggested if we
store 50 values for keys in an individual column that will provide
better performance as the data type is native (INT2) on the other
hand if we store all the key value pair in a single JSONB columnthe
performance will degrade even after applying a GIN index on that
however the statement sounds funny but I want to take everyoneopenion?
On Mon, 23 Dec 2024, 10:05 pm Adrian Klaver,
<adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>>wrote:
On 12/23/24 07:53, Divyansh Gupta JNsThMAudy wrote:
Hii Community,
I need to provide a support for some functionality for my
application
for that I need to store 50 key value pair set, so I am in
a
dilemma,
weather I create 50 new columns of int2 data type each
column
will
This is unclear, I am trying to figure out you go from '50 key
value
pair set' to '50 new columns of int2'.In other words how 50 pairs turn into 50 columns?
Then there is the question of why 50 keys per row in the first
place?contain value of a specific key or should I go with JSONB
data type with
50 key value pair, the table on which I am going to do that
all contains
1 Billion rows of data and have 84 hash partitions, I have
gone through
multiple articles some of them mentioned it's a good
approach
to create
50 new columns and some states that creating one JSONB
would
be best
that's why I need your help to move forward, also I am
ready
to make
H-Store instead of JSONB if it provides better performance.
Please help me to comes out from that dilemma.Regards,
Divyansh Gupta,
Database Administrator--
Adrian Klaver
adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>--
Adrian Klaver
adrian.klaver@aklaver.com--
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!
--
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!
Let's make it more understandable, here is the table schema with 50 columns
in it
CREATE TABLE dbo.googledocs_tbl (
gdid int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1
MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL,
userid int8 NOT NULL,
t1 int4 NULL,
t2 int4 NULL,
t3 int4 NULL,
t4 int4 NULL,
t5 int4 NULL,
t6 int4 NULL,
t7 int4 NULL,
t8 int4 NULL,
t9 int4 NULL,
t10 int4 NULL,
t11 int4 NULL,
t12 int4 NULL,
t13 int4 NULL,
t14 int4 NULL,
t15 int4 NULL,
t16 int4 NULL,
t17 int4 NULL,
t18 int4 NULL,
t19 int4 NULL,
t20 int4 NULL,
t21 int4 NULL,
t22 int4 NULL,
t23 int4 NULL,
t24 int4 NULL,
t25 int4 NULL,
t26 int4 NULL,
t27 int4 NULL,
t28 int4 NULL,
t29 int4 NULL,
t30 int4 NULL,
t31 int4 NULL,
t32 int4 NULL,
t33 int4 NULL,
t34 int4 NULL,
t35 int4 NULL,
t36 int4 NULL,
t37 int4 NULL,
t38 int4 NULL,
t39 int4 NULL,
t40 int4 NULL,
t41 int4 NULL,
t42 int4 NULL,
t43 int4 NULL,
t44 int4 NULL,
t45 int4 NULL,
t46 int4 NULL,
t47 int4 NULL,
t48 int4 NULL,
t49 int4 NULL,
t50 int4 NULL,
CONSTRAINT googledocs_tbl_pkey PRIMARY KEY (gdid),
);
Every time when i query I will query it along with userid
Ex : where userid = 12345678 and t1 in (1,2,3) and t2 in (0,1,2)
more key filters if customer applies
On the other hand if I create a single jsonb column the schema will look
like :
CREATE TABLE dbo.googledocs_tbl (
gdid int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1
MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL,
userid int8 NOT NULL,
addons_json jsonb default '{}'::jsonb
CONSTRAINT googledocs_tbl_pkey PRIMARY KEY (gdid),
);
and the query would be like
where userid = 12345678 and ((addons_json @> {t1:1}) or (addons_json @>
{t1:2}) or (addons_json @> {t1:3})
more key filters if customer applies
On Mon, Dec 23, 2024 at 10:38 PM David G. Johnston <
david.g.johnston@gmail.com> wrote:
Show quoted text
On Mon, Dec 23, 2024, 10:01 Divyansh Gupta JNsThMAudy <ag1567827@gmail.com>
wrote:So here my question is considering one JSONB column is perfect or
considering 50 columns will be more optimised.The relational database engine is designed around the column-based
approach. Especially if the columns are generally unchanging, combined
with using fixed-width data types.David J.
Values can be updated based on customer actions
All rows won't have all 50 key value pairs always if I make those keys into
columns the rows might have null value on the other hand if it is JSONB
then the key value pair will not be there
Yes in UI customers can search for the key value pairs
During data population the key value pair will be empty array in case of
JSONB column or NULL in case of table columns, later when customer performs
some actions that time the key value pairs will populate and update, based
on what action customer performs.
On Mon, 23 Dec 2024, 10:51 pm Divyansh Gupta JNsThMAudy, <
ag1567827@gmail.com> wrote:
Show quoted text
Let's make it more understandable, here is the table schema with 50
columns in itCREATE TABLE dbo.googledocs_tbl (
gdid int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1
MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL,
userid int8 NOT NULL,
t1 int4 NULL,
t2 int4 NULL,
t3 int4 NULL,
t4 int4 NULL,
t5 int4 NULL,
t6 int4 NULL,
t7 int4 NULL,
t8 int4 NULL,
t9 int4 NULL,
t10 int4 NULL,
t11 int4 NULL,
t12 int4 NULL,
t13 int4 NULL,
t14 int4 NULL,
t15 int4 NULL,
t16 int4 NULL,
t17 int4 NULL,
t18 int4 NULL,
t19 int4 NULL,
t20 int4 NULL,
t21 int4 NULL,
t22 int4 NULL,
t23 int4 NULL,
t24 int4 NULL,
t25 int4 NULL,
t26 int4 NULL,
t27 int4 NULL,
t28 int4 NULL,
t29 int4 NULL,
t30 int4 NULL,
t31 int4 NULL,
t32 int4 NULL,
t33 int4 NULL,
t34 int4 NULL,
t35 int4 NULL,
t36 int4 NULL,
t37 int4 NULL,
t38 int4 NULL,
t39 int4 NULL,
t40 int4 NULL,
t41 int4 NULL,
t42 int4 NULL,
t43 int4 NULL,
t44 int4 NULL,
t45 int4 NULL,
t46 int4 NULL,
t47 int4 NULL,
t48 int4 NULL,
t49 int4 NULL,
t50 int4 NULL,
CONSTRAINT googledocs_tbl_pkey PRIMARY KEY (gdid),
);Every time when i query I will query it along with userid
Ex : where userid = 12345678 and t1 in (1,2,3) and t2 in (0,1,2)
more key filters if customer appliesOn the other hand if I create a single jsonb column the schema will look
like :CREATE TABLE dbo.googledocs_tbl (
gdid int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1
MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL,
userid int8 NOT NULL,
addons_json jsonb default '{}'::jsonb
CONSTRAINT googledocs_tbl_pkey PRIMARY KEY (gdid),
);and the query would be like
where userid = 12345678 and ((addons_json @> {t1:1}) or (addons_json @>
{t1:2}) or (addons_json @> {t1:3})
more key filters if customer appliesOn Mon, Dec 23, 2024 at 10:38 PM David G. Johnston <
david.g.johnston@gmail.com> wrote:On Mon, Dec 23, 2024, 10:01 Divyansh Gupta JNsThMAudy <
ag1567827@gmail.com> wrote:So here my question is considering one JSONB column is perfect or
considering 50 columns will be more optimised.The relational database engine is designed around the column-based
approach. Especially if the columns are generally unchanging, combined
with using fixed-width data types.David J.
Empty JSONB by mistake, I wrote array sorry about that
On Mon, 23 Dec 2024, 10:59 pm Divyansh Gupta JNsThMAudy, <
ag1567827@gmail.com> wrote:
Show quoted text
Values can be updated based on customer actions
All rows won't have all 50 key value pairs always if I make those keys
into columns the rows might have null value on the other hand if it is
JSONB then the key value pair will not be thereYes in UI customers can search for the key value pairs
During data population the key value pair will be empty array in case of
JSONB column or NULL in case of table columns, later when customer performs
some actions that time the key value pairs will populate and update, based
on what action customer performs.On Mon, 23 Dec 2024, 10:51 pm Divyansh Gupta JNsThMAudy, <
ag1567827@gmail.com> wrote:Let's make it more understandable, here is the table schema with 50
columns in itCREATE TABLE dbo.googledocs_tbl (
gdid int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1
MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL,
userid int8 NOT NULL,
t1 int4 NULL,
t2 int4 NULL,
t3 int4 NULL,
t4 int4 NULL,
t5 int4 NULL,
t6 int4 NULL,
t7 int4 NULL,
t8 int4 NULL,
t9 int4 NULL,
t10 int4 NULL,
t11 int4 NULL,
t12 int4 NULL,
t13 int4 NULL,
t14 int4 NULL,
t15 int4 NULL,
t16 int4 NULL,
t17 int4 NULL,
t18 int4 NULL,
t19 int4 NULL,
t20 int4 NULL,
t21 int4 NULL,
t22 int4 NULL,
t23 int4 NULL,
t24 int4 NULL,
t25 int4 NULL,
t26 int4 NULL,
t27 int4 NULL,
t28 int4 NULL,
t29 int4 NULL,
t30 int4 NULL,
t31 int4 NULL,
t32 int4 NULL,
t33 int4 NULL,
t34 int4 NULL,
t35 int4 NULL,
t36 int4 NULL,
t37 int4 NULL,
t38 int4 NULL,
t39 int4 NULL,
t40 int4 NULL,
t41 int4 NULL,
t42 int4 NULL,
t43 int4 NULL,
t44 int4 NULL,
t45 int4 NULL,
t46 int4 NULL,
t47 int4 NULL,
t48 int4 NULL,
t49 int4 NULL,
t50 int4 NULL,
CONSTRAINT googledocs_tbl_pkey PRIMARY KEY (gdid),
);Every time when i query I will query it along with userid
Ex : where userid = 12345678 and t1 in (1,2,3) and t2 in (0,1,2)
more key filters if customer appliesOn the other hand if I create a single jsonb column the schema will look
like :CREATE TABLE dbo.googledocs_tbl (
gdid int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1
MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL,
userid int8 NOT NULL,
addons_json jsonb default '{}'::jsonb
CONSTRAINT googledocs_tbl_pkey PRIMARY KEY (gdid),
);and the query would be like
where userid = 12345678 and ((addons_json @> {t1:1}) or (addons_json @>
{t1:2}) or (addons_json @> {t1:3})
more key filters if customer appliesOn Mon, Dec 23, 2024 at 10:38 PM David G. Johnston <
david.g.johnston@gmail.com> wrote:On Mon, Dec 23, 2024, 10:01 Divyansh Gupta JNsThMAudy <
ag1567827@gmail.com> wrote:So here my question is considering one JSONB column is perfect or
considering 50 columns will be more optimised.The relational database engine is designed around the column-based
approach. Especially if the columns are generally unchanging, combined
with using fixed-width data types.David J.
Given what you just wrote, I'd stick with 50 separate t* columns.
Simplifies queries, simplifies updates, and eliminates JSONB conversions.
On Mon, Dec 23, 2024 at 12:29 PM Divyansh Gupta JNsThMAudy <
ag1567827@gmail.com> wrote:
Values can be updated based on customer actions
All rows won't have all 50 key value pairs always if I make those keys
into columns the rows might have null value on the other hand if it is
JSONB then the key value pair will not be thereYes in UI customers can search for the key value pairs
During data population the key value pair will be empty array in case of
JSONB column or NULL in case of table columns, later when customer performs
some actions that time the key value pairs will populate and update, based
on what action customer performs.On Mon, 23 Dec 2024, 10:51 pm Divyansh Gupta JNsThMAudy, <
ag1567827@gmail.com> wrote:Let's make it more understandable, here is the table schema with 50
columns in itCREATE TABLE dbo.googledocs_tbl (
gdid int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1
MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL,
userid int8 NOT NULL,
t1 int4 NULL,
t2 int4 NULL,
t3 int4 NULL,
t4 int4 NULL,
t5 int4 NULL,
t6 int4 NULL,
t7 int4 NULL,
t8 int4 NULL,
t9 int4 NULL,
t10 int4 NULL,
t11 int4 NULL,
t12 int4 NULL,
t13 int4 NULL,
t14 int4 NULL,
t15 int4 NULL,
t16 int4 NULL,
t17 int4 NULL,
t18 int4 NULL,
t19 int4 NULL,
t20 int4 NULL,
t21 int4 NULL,
t22 int4 NULL,
t23 int4 NULL,
t24 int4 NULL,
t25 int4 NULL,
t26 int4 NULL,
t27 int4 NULL,
t28 int4 NULL,
t29 int4 NULL,
t30 int4 NULL,
t31 int4 NULL,
t32 int4 NULL,
t33 int4 NULL,
t34 int4 NULL,
t35 int4 NULL,
t36 int4 NULL,
t37 int4 NULL,
t38 int4 NULL,
t39 int4 NULL,
t40 int4 NULL,
t41 int4 NULL,
t42 int4 NULL,
t43 int4 NULL,
t44 int4 NULL,
t45 int4 NULL,
t46 int4 NULL,
t47 int4 NULL,
t48 int4 NULL,
t49 int4 NULL,
t50 int4 NULL,
CONSTRAINT googledocs_tbl_pkey PRIMARY KEY (gdid),
);Every time when i query I will query it along with userid
Ex : where userid = 12345678 and t1 in (1,2,3) and t2 in (0,1,2)
more key filters if customer appliesOn the other hand if I create a single jsonb column the schema will look
like :CREATE TABLE dbo.googledocs_tbl (
gdid int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1
MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL,
userid int8 NOT NULL,
addons_json jsonb default '{}'::jsonb
CONSTRAINT googledocs_tbl_pkey PRIMARY KEY (gdid),
);and the query would be like
where userid = 12345678 and ((addons_json @> {t1:1}) or (addons_json @>
{t1:2}) or (addons_json @> {t1:3})
more key filters if customer appliesOn Mon, Dec 23, 2024 at 10:38 PM David G. Johnston <
david.g.johnston@gmail.com> wrote:On Mon, Dec 23, 2024, 10:01 Divyansh Gupta JNsThMAudy <
ag1567827@gmail.com> wrote:So here my question is considering one JSONB column is perfect or
considering 50 columns will be more optimised.The relational database engine is designed around the column-based
approach. Especially if the columns are generally unchanging, combined
with using fixed-width data types.David J.
--
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!
I have one confusion with this design if I opt to create 50 columns I need
to create 50 index which will work with userid index in Bitmap on the other
hand if I create a JSONB column I need to create a single index ?
On Mon, 23 Dec 2024, 11:10 pm Ron Johnson, <ronljohnsonjr@gmail.com> wrote:
Show quoted text
Given what you just wrote, I'd stick with 50 separate t* columns.
Simplifies queries, simplifies updates, and eliminates JSONB conversions.On Mon, Dec 23, 2024 at 12:29 PM Divyansh Gupta JNsThMAudy <
ag1567827@gmail.com> wrote:Values can be updated based on customer actions
All rows won't have all 50 key value pairs always if I make those keys
into columns the rows might have null value on the other hand if it is
JSONB then the key value pair will not be thereYes in UI customers can search for the key value pairs
During data population the key value pair will be empty array in case of
JSONB column or NULL in case of table columns, later when customer performs
some actions that time the key value pairs will populate and update, based
on what action customer performs.On Mon, 23 Dec 2024, 10:51 pm Divyansh Gupta JNsThMAudy, <
ag1567827@gmail.com> wrote:Let's make it more understandable, here is the table schema with 50
columns in itCREATE TABLE dbo.googledocs_tbl (
gdid int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1
MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL,
userid int8 NOT NULL,
t1 int4 NULL,
t2 int4 NULL,
t3 int4 NULL,
t4 int4 NULL,
t5 int4 NULL,
t6 int4 NULL,
t7 int4 NULL,
t8 int4 NULL,
t9 int4 NULL,
t10 int4 NULL,
t11 int4 NULL,
t12 int4 NULL,
t13 int4 NULL,
t14 int4 NULL,
t15 int4 NULL,
t16 int4 NULL,
t17 int4 NULL,
t18 int4 NULL,
t19 int4 NULL,
t20 int4 NULL,
t21 int4 NULL,
t22 int4 NULL,
t23 int4 NULL,
t24 int4 NULL,
t25 int4 NULL,
t26 int4 NULL,
t27 int4 NULL,
t28 int4 NULL,
t29 int4 NULL,
t30 int4 NULL,
t31 int4 NULL,
t32 int4 NULL,
t33 int4 NULL,
t34 int4 NULL,
t35 int4 NULL,
t36 int4 NULL,
t37 int4 NULL,
t38 int4 NULL,
t39 int4 NULL,
t40 int4 NULL,
t41 int4 NULL,
t42 int4 NULL,
t43 int4 NULL,
t44 int4 NULL,
t45 int4 NULL,
t46 int4 NULL,
t47 int4 NULL,
t48 int4 NULL,
t49 int4 NULL,
t50 int4 NULL,
CONSTRAINT googledocs_tbl_pkey PRIMARY KEY (gdid),
);Every time when i query I will query it along with userid
Ex : where userid = 12345678 and t1 in (1,2,3) and t2 in (0,1,2)
more key filters if customer appliesOn the other hand if I create a single jsonb column the schema will look
like :CREATE TABLE dbo.googledocs_tbl (
gdid int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1
MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL,
userid int8 NOT NULL,
addons_json jsonb default '{}'::jsonb
CONSTRAINT googledocs_tbl_pkey PRIMARY KEY (gdid),
);and the query would be like
where userid = 12345678 and ((addons_json @> {t1:1}) or (addons_json @>
{t1:2}) or (addons_json @> {t1:3})
more key filters if customer appliesOn Mon, Dec 23, 2024 at 10:38 PM David G. Johnston <
david.g.johnston@gmail.com> wrote:On Mon, Dec 23, 2024, 10:01 Divyansh Gupta JNsThMAudy <
ag1567827@gmail.com> wrote:So here my question is considering one JSONB column is perfect or
considering 50 columns will be more optimised.The relational database engine is designed around the column-based
approach. Especially if the columns are generally unchanging, combined
with using fixed-width data types.David J.
--
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!
On 12/23/24 09:49, Divyansh Gupta JNsThMAudy wrote:
I have one confusion with this design if I opt to create 50 columns I
need to create 50 index which will work with userid index in Bitmap on
the other hand if I create a JSONB column I need to create a single index ?
There still is the part where you plan to partition this data on some as
not yet fully specified hash.
--
Adrian Klaver
adrian.klaver@aklaver.com