小编abs*_*bsg的帖子

没有服务器的Mongoid可以匹配首选项

当我尝试对数据库执行查询时,我有一堆正在运行的sidekiq作业失败并出现以下错误:

No server is available matching preference: #<Mongo::ServerSelector::Primary:0x70249928071560 tag_sets=[] server_selection_timeout=30 local_threshold=0.015>
Run Code Online (Sandbox Code Playgroud)

这似乎是随机发生的,而不是所有的时间.我的mongoid.yml结构如下:

hosts:
    - XX.XXX.XXX.X:27000
    - XX.XXX.XXX.XXX:27000
  database: acbde__production
  options:
    connect_timeout: 20
    read:
      mode: :secondary
    max_pool_size: 800
    replica_set: acbdeReplset
Run Code Online (Sandbox Code Playgroud)

以前有人有过这个问题吗?

mongodb mongoid sidekiq

8
推荐指数
1
解决办法
2632
查看次数

使用 NULL 将 JSON 数组扩展为文本值

当具有 NULL 值时,我在生成查询以将 JSON 数组显示为一组文本值时遇到问题。假设我有下表:

Name | Meta
Art0 | {"category":["sport"]}
Art1 | [NULL]
Art2 | {"category":["sport", "health"]}
Run Code Online (Sandbox Code Playgroud)

如果我做类似的事情:

SELECT name, jsonb_array_elements_text(meta->'category') tag FROM table
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

Name | Tag
Art0 | sport
Art2 | sport
Art2 | health
Run Code Online (Sandbox Code Playgroud)

问题是 Art1 正在被删除。如何执行还包含 Art1 行以及 Tag 列上的空字符串或 NULL 值的查询?

谢谢

postgresql json

5
推荐指数
1
解决办法
1618
查看次数

第一次查询很慢

我在表上执行第一个查询时遇到了麻烦。后续查询要快得多,即使我更改了要查找的范围日期。我假设 PostgreSQL 实现了一种缓存机制,可以让后续查询更快。我可以尝试预热缓存,以便第一个用户请求可以访问缓存。但是,我认为我可以以某种方式改进以下查询:

SELECT
    y.id, y.title, x.visits, x.score
FROM (
    SELECT
        article_id, visits,
        COALESCE(ROUND((visits / NULLIF(hits ,0)::float)::numeric, 4), 0) score
    FROM (
        SELECT
            article_id, SUM(visits) visits, SUM(hits) hits
        FROM
            article_reports
        WHERE
            a.site_id = 'XYZ' AND a.date >= '2017-04-13'  AND a.date <= '2017-06-28'
        GROUP BY
            article_id
    ) q ORDER BY score DESC, visits DESC LIMIT(20)
) x 
INNER JOIN 
    articles y ON x.article_id = y.id
Run Code Online (Sandbox Code Playgroud)

关于如何改进这一点的任何想法。以下是 EXPLAIN 的结果:

   Nested Loop  (cost=84859.76..85028.54 rows=20 width=272) (actual time=12612.596..12612.836 rows=20 loops=1)
  ->  Limit  (cost=84859.34..84859.39 rows=20 …
Run Code Online (Sandbox Code Playgroud)

postgresql

4
推荐指数
1
解决办法
4317
查看次数

标签 统计

postgresql ×2

json ×1

mongodb ×1

mongoid ×1

sidekiq ×1