gpt4 book ai didi

使用 V8 和 PostgreSQL 的 Javascript 序列化和性能

转载 作者:行者123 更新时间:2023-11-29 11:08:18 38 4
gpt4 key购买 nike

我已经experimenting with PostgreSQL and PL/V8 ,它将 V8 JavaScript 引擎嵌入到 PostgreSQL 中。使用它,我可以查询数据库中的 JSON 数据,这非常棒。

基本做法如下:

CREATE or REPLACE FUNCTION 
json_string(data json, key text) RETURNS TEXT AS $$
var data = JSON.parse(data);
return data[key];
$$ LANGUAGE plv8 IMMUTABLE STRICT;

SELECT id, data FROM things WHERE json_string(data,'name') LIKE 'Z%';

使用 V8,我可以将 JSON 数据解析为 JS,然后返回一个字段,我可以将其用作常规 pg 查询表达式。

但是

在大型数据集上,性能可能是一个问题,因为我需要解析数据的每一行。解析器很快,但它绝对是过程中最慢的部分,而且每次都必须发生。

我正在尝试解决(最终得到一个实际问题)的是是否有一种方法可以缓存或预处理 JSON ...甚至可以在表中存储 JSON 的二进制表示被 V8 自动用作 JS 对象可能是一个胜利。我已经研究过使用替代格式,例如 messagepack 或 protobuf,但我认为它们在任何情况下都不一定与 native JSON 解析器一样快。

思想

PG 有 blob 和二进制类型,所以数据可以二进制存储,然后我们只需要一种方法将其编码到 V8 中。

最佳答案

Postgres 支持任意函数调用的索引。以下索引应该可以解决问题:

CREATE INDEX json_idx ON things (json_string(field,'name'));

关于使用 V8 和 PostgreSQL 的 Javascript 序列化和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10669900/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com