PostgreSQL MATERIALIZED VIEW 비차단이지만 자주 업데이트됨

  • 업데이트 후 새로 고쳐야 합니다.
  • REFRESHing은 VIEW의 읽기를 잠그고 이후에 서버와 UI가 응답하지 않게 만들 수 있습니다.
  • REFRESH MATERIALIZED VIEW CONCURRENTLY는 읽기를 차단하지 않도록 합니다. 하지만
  • 여러 번 반복되는 REFRESH의 스틸 블록 읽기 전송
  • 스로틀링으로 수정해야 합니다
  • .
  • 또한 MATERIALIZED VIEW
  • 에서 동시에 고유 인덱스가 필요합니다.


    해결책??? - 쓰로틀링




    import sql from '@databases/sql'
    
    const isPending: Record<string, Promise<any[]> | undefined> = {}
    
    export async function refresh(view: string) {
      if (!isPending[view]) {
        isPending[view] = new Promise((resolve, reject) => {
          db.query(
            sql`REFRESH MATERIALIZED VIEW CONCURRENTLY ${sql.__dangerous__rawValue(
              view
            )}`
          )
            .then(resolve)
            .catch(reject)
        })
      }
      await isPending[view]
    }
    

    내 대답은 여전히 ​​잘못된 것 같습니다. 조절하기보다는 디바운스해야 합니다. 최종 업데이트를 보장합니다.

    구체화된 뷰를 새로 고치는 데 약 30초가 걸릴 수 있습니다. PL/pgSQL 함수 및 인덱싱을 사용하여 항목이 너무 많기 때문입니다.

    그래서 저는 PostgreSQL을 처음 사용합니다.



    하지만 이 프로젝트에서 볼 수 있듯이 플러그인, PL/pgSQL 등을 사용하여 전체 프로젝트를 만들었습니다. https://github.com/zhquiz/zhquiz/tree/master/packages/www/db/initdb.d


    즈퀴즈 / 즈퀴즈


    매일 중국어 한자, 단어, 문장 퀴즈!





    포함하여 도움이 될 수 있는 모든 것을 알려주세요.

    좋은 웹페이지 즐겨찾기