我需要在大数据仓库中支持动态字段和值来存储 API 请求日志,我的用户案例是我需要存储所有 API 请求查询字符串并能够在未来对它们执行查询(所以它不仅仅是存储,所以我不能为他们使用 blob)
例如 http://example.com/?action=test&foo=abc&bar=def...
我需要存储所有field => value映射,即(action => test), (foo => abc), (bar => def),由于该字段是如此动态,我找到的唯一解决方案是使用 Entity-Attribute-Value,但是,人们一直说这是一个非常糟糕的设计。
那么,考虑一下我上面的用例,什么是 EAV 的合适替代品?
我当前使用 KAV 的模式
表requests
(id, timestamp, uri)
例如(1, 149382220, '/')
表params
(request_id, key, value)
例如(1, 'action', 'test'), (1, 'foo', 'abc'), (1, 'bar', 'def')
有什么建议?
更新:我们在 AWS RedShift 上运行仓库
我想搭建一个类似Google Analytics的系统(仅供内部使用,流量少,功能少),主要关注
通过不同维度的用户人口统计信息,例如用户代理、操作系统、国家等,实时统计唯一的 URI 访问/PV
实时计算平均用户会话长度(如果来自同一IP的两个请求之间的差异小于1分钟)
有没有好的数据库存储可以实时启用这种查询?
ps 我目前正在测试 InfiDB。
我只是使用了很少的 InnoDB 表(例如小于 1MB),但是在 MySQL 启动期间,它说
InnoDB: Initializing buffer pool, size = 128.0M
Run Code Online (Sandbox Code Playgroud)
是不是说我用这么小的内存,服务器还是128M内存?
我的查询缓存设置如下:
mysql> SHOW GLOBAL STATUS LIKE 'Q%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 2270 |
| Qcache_free_memory | 6580864 |
| Qcache_hits | 12802676 |
| Qcache_inserts | 2094054 |
| Qcache_lowmem_prunes | 111676 |
| Qcache_not_cached | 137257 |
| Qcache_queries_in_cache | 7559 |
| Qcache_total_blocks | 18240 |
| Queries | 15571718 |
| Questions | 15571715 |
+-------------------------+----------+
Run Code Online (Sandbox Code Playgroud)
如您所见,我的 值相当高Qcache_lowmem_prunes,但我仍然有相当多的可用内存(总共 32MB 查询缓存大小中的 6MB)
我想看看是否可以进一步减少Qcache_lowmem_prunes.
我应该使用较低的值query_cache_min_res_unit吗?(现在是 4096)
mysql ×3
columnstore ×1
eav ×1
innodb ×1
linux ×1
oracle ×1
performance ×1
postgresql ×1
query-cache ×1
redshift ×1
star-schema ×1
ubuntu ×1