Memory consumption
The binary format of the JSON data type should consume more memory. But how much? I did a little test by comparing a freshly loaded 25,000 row dataset stored as JSON and stored as TEXT. Seven top level attributes per JSON document. Average JSON_DEPTH is 5.9 . Let's see:mysql> DESC data_as_text; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | doc | text | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> SELECT COUNT(*),AVG(JSON_LENGTH(doc)) FROM data_as_text; +----------+-----------------------+ | COUNT(*) | AVG(JSON_LENGTH(doc)) | +----------+-----------------------+ | 25359 | 7.0000 | +----------+-----------------------+ 1 row in set (0.81 sec) mysql> DESC data_as_json; +-------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | doc | json | NO | | NULL | | +-------+---------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) mysql> SELECT COUNT(*),AVG(JSON_LENGTH(doc)) FROM data_as_json; +----------+-----------------------+ | COUNT(*) | AVG(JSON_LENGTH(doc)) | +----------+-----------------------+ | 25359 | 7.0000 | +----------+-----------------------+ 1 row in set (0.08 sec) mysql> select name,allocated_size/1024/1024 AS "size in MB" from information_schema.innodb_sys_tablespaces where name like "%temp%"; +-------------------+-------------+ | name | size in MB | +-------------------+-------------+ | temp/data_as_json | 23.00390625 | | temp/data_as_text | 22.00390625 | +-------------------+-------------+ 2 rows in set (0.00 sec)The increased memory consumption is 1/22 in this case, which is roughly 4,5%. At the same time you see the benefit: The full table scan with some JSON operation has a 90% reduction in runtime when using JSON datatype.
Don't take this number for real. Of course it depends on the number of JSON attributes, character set and others. Just a rough indication. If you want all the details look at the JSON architecture in WL#8132.
No comments:
Post a Comment