假设我在一个文件夹中有一组 .json 文件,每个文件都代表一本书,即
- 文件夹/1.json 中的书 1
- 文件夹/2.json 中的书 2
- …</li>
这些文件每个大小只有 6kb 到 3mb 之间,但有数百万个!
现在我使用 MariaDb 执行以下操作:
CREATE OR REPLACE TABLE books (
isbn CHAR(13) NOT NULL,
title VARCHAR(256) NULL
) ENGINE=CONNECT TABLE_TYPE=JSON OPTION_LIST="PRETTY=2,JMODE=1,MAPPING=1" MULTIPLE=1 FILE_NAME="folder/*.json" READONLY=1;
然后是一个简单的查询,例如
SELECT COUNT(*) FROM books;
如果文件夹中只有几个文件,这可以正常工作。但是,即使只有几千个,它也不再起作用:客户端崩溃Lost connection to MySQL server during query
并且服务器日志(对我来说)并没有真正的帮助。
我想这是一个内存问题,但我不明白为什么会发生:似乎没有必要将每个文件/书对象加载到内存中;服务器可以一个接一个地处理每个文件,对吗?
我尝试但没有成功的事情
PRETTY=0
代替PRETTY=2
HUGE=1
set global connect_work_size=999999999
(或者)MAPPING=0
代替MAPPING=1
max_allowed_packet=1024M
在我的.ini
任何帮助深表感谢。
编辑:这些文件只是普通的对象 JSON 文件,例如
{"timestamp":1564002510168,"isbn":"9781081958077","author":"Mark Twain", "title": "The Adventures of Tom Sawyer: Annotated"}
(和一些进一步的属性)。