zoukankan      html  css  js  c++  java
  • pgspider redis fdw 试用

    目前redis 的fdw有好几个,github 上有一个start 比较高的,但是对于新版本pg 支持不好,目前使用了
    https://github.com/nahanni/rw_redis_fdw,以下是docker 镜像的构建以及试用

    dockerfile

    老样子基于base 镜像构建

     
    FROM dalongrong/pgspider:base as build
    WORKDIR /app
    RUN apt-get update && apt-get install -y libhiredis-dev
    RUN wget https://github.com/nahanni/rw_redis_fdw/archive/v1.0.tar.gz && tar zxf v1.0.tar.gz && mv rw_redis_fdw-1.0 redis_fdw && cp -rf redis_fdw /app/postgresql-11.6/contrib/redis_fdw
    RUN cd /app/postgresql-11.6/contrib/redis_fdw && make && make install
    FROM debian:stretch-slim
    ENV GOSU_VERSION 1.11
    RUN apt-get update && apt-get install -y wget libhiredis-dev libreadline-dev
    # explicitly set user/group IDs
    RUN set -eux; 
     groupadd -r postgres --gid=999; 
    # https://salsa.debian.org/postgresql/postgresql-common/blob/997d842ee744687d99a2b2d95c1083a2615c79e8/debian/postgresql-common.postinst#L32-35
     useradd -r -g postgres --uid=999 --home-dir=/var/lib/postgresql --shell=/bin/bash postgres; 
    # also create the postgres user's home directory with appropriate permissions
    # see https://github.com/docker-library/postgres/issues/274
     mkdir -p /var/lib/postgresql; 
     chown -R postgres:postgres /var/lib/postgresql
    RUN wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" 
       && chmod +x /usr/local/bin/gosu 
       && gosu nobody true
    # make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default
    RUN set -eux; 
       if [ -f /etc/dpkg/dpkg.cfg.d/docker ]; then 
       # if this file exists, we're likely in "debian:xxx-slim", and locales are thus being excluded so we need to remove that exclusion (since we need locales)
       grep -q '/usr/share/locale' /etc/dpkg/dpkg.cfg.d/docker; 
       sed -ri '//usr/share/locale/d' /etc/dpkg/dpkg.cfg.d/docker; 
       ! grep -q '/usr/share/locale' /etc/dpkg/dpkg.cfg.d/docker; 
       fi; 
       apt-get update; apt-get install -y locales; rm -rf /var/lib/apt/lists/*; 
       localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
    ENV LANG en_US.utf8
    # install "nss_wrapper" in case we need to fake "/etc/passwd" and "/etc/group" (especially for OpenShift)
    # https://github.com/docker-library/postgres/issues/359
    # https://cwrap.org/nss_wrapper.html
    RUN set -eux; 
       apt-get update; 
       apt-get install -y --no-install-recommends libnss-wrapper; 
       rm -rf /var/lib/apt/lists/*
    RUN mkdir /docker-entrypoint-initdb.d
    COPY --from=build /usr/local/pgspider /usr/local/pgspider
    RUN sed -ri "s!^#?(listen_addresses)s*=s*S+.*!1 = '*'!" /usr/local/pgspider/share/postgresql/postgresql.conf.sample; 
       grep -F "listen_addresses = '*'" /usr/local/pgspider/share/postgresql/postgresql.conf.sample
    RUN mkdir -p /var/run/postgresql && chown -R postgres:postgres /var/run/postgresql && chmod 2777 /var/run/postgresql
    ENV PATH $PATH:/usr/local/pgspider/bin
    ENV PGDATA /var/lib/postgresql/data
    RUN mkdir -p "$PGDATA" && chown -R postgres:postgres "$PGDATA" && chmod 777 "$PGDATA"
    VOLUME /var/lib/postgresql/data
    COPY docker-entrypoint.sh /usr/local/bin/
    RUN ln -s usr/local/bin/docker-entrypoint.sh / # backwards compat
    ENTRYPOINT ["docker-entrypoint.sh"]
    EXPOSE 5432
    CMD ["postgres"]

    参考使用

    • 环境准备
    version: "3"
    services: 
      redis:
        image: redis
        ports:
        - "6379:6379"
      pg-redis:
        image: dalongrong/pgspider:redis
        ports:
        - "5432:5432"
        environment: 
        - "POSTGRES_PASSWORD:dalong"
    • 启动
    docker-compose up -d 
    • 使用
    // 创建扩展
    CREATE EXTENSION redis_fdw;
    // 创建server
    CREATE SERVER redis_server 
         FOREIGN DATA WRAPPER redis_fdw 
         OPTIONS (host 'redis', port '6379');
    // 创建用户映射,此demo 填写随意的就可以
    CREATE USER MAPPING FOR postgres
         SERVER redis_server
         OPTIONS (password 'demo');
    //  创建外部表映射,一个可写的string 类型
    CREATE FOREIGN TABLE rft_str(
          key TEXT,
          value TEXT,
          expiry INT
      ) SERVER redis_server
        OPTIONS (tabletype 'string');
    //  insert 数据
        insert into rft_str values('user_id','dalong',2000);
    • 查询效果

    说明

    此redis fdw 扩展功能还是比较强的,支持的方法也比较多,当前还没有ga,但是很不错

    参考资料

    https://github.com/nahanni/rw_redis_fdw
    https://github.com/redis/hiredis
    https://hub.docker.com/repository/docker/dalongrong/pgspider
    https://github.com/rongfengliang/pgspider-docker

  • 相关阅读:
    jMeter 里 CSV Data Set Config Sharing Mode 的含义详解
    如何使用 jMeter Parallel Controller
    使用 Chrome 开发者工具 coverage 功能分析 web 应用的渲染阻止资源的执行分布情况
    使用 Chrome 开发者工具的 lighthouse 功能分析 web 应用的性能问题
    关于 SAP 电商云首页加载时触发的 OCC API 请求
    SAP UI5 确保控件 id 全局唯一的实现方法
    SAP 电商云 Accelerator 和 Spartacus UI 的工作机制差异
    介绍一个好用的能让网页变成黑色背景的护眼 Chrome 扩展应用
    Chrome 开发者工具 performance 标签页的用法
    Client Side Cache 和 Server Side Cache 的区别
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/12293816.html
Copyright © 2011-2022 走看看