SQL(Postgres) 백엔드 대신 플랫/텍스트 백킹 파일을 사용할 수 있는 옵션

현재 포럼 게시물, 사용자 계정 등의 주요 저장소는 PostgreSQL 데이터베이스입니다.

포럼 콘텐츠의 주요 저장 형식을 단순한 텍스트 파일로 변경하는 것은 어떨까요?

데이터베이스 문제를 수정하기가 매우 어렵기 때문에(사용자인 저에게는 더욱 그렇습니다), SQL 데이터베이스의 불투명한 바이너리 형식 때문에 모든 포럼 데이터를 잃을 위험이 높다고 생각합니다. 심각하게 손상된 데이터베이스(위와 같은 문제처럼 눈에 띄지 않는 경우)는 아무도 수정할 수 없거나, 일반 사용자 입장에서는 비용이 너무 비쌀 수 있습니다.

성능과 같은 이유로 PostgreSQL과 같은 데이터베이스를 사용하는 데에는 매우 좋은 이유가 있다는 것은 잘 알고 있습니다. 그러나 데이터베이스 백업 및 복원 기능이 손상되거나 깨진 경우를 대비하여, 비상 상황의 최후의 수단으로 투명하고 사람이 읽을 수 있는 텍스트 형식의 백업을 제안합니다.

git이 얼마나 뛰어난지 설득할 필요는 없을 것입니다. 이미 사용하고 있으니까요. 포럼 콘텐츠를 서브 폴더 안의 수많은 텍스트 파일로 저장할 수 있습니다. 이렇게 하면 전체 폴더를 git 버전 관리 하에 둘 수 있습니다. 버그가 도입되면 어떤 커밋이 원인이었는지 추적하기가 훨씬 쉬워집니다.

데이터베이스(신뢰할 수 없고 복잡한)가 여전히 필요할 가능성이 높으므로, 이러한 텍스트 파일(단순하고 신뢰할 수 있는)은 데이터베이스를 “소스에서” 재생성하는 데 사용되는 템플릿 역할을 할 수 있습니다. 실시간으로 텍스트 파일에 새 게시물을 저장하는 것이 너무 느리다면, 텍스트 파일 백업 옵션을 온디맨드 방식으로 설정하거나 시스템이 유휴 상태일 때 실행하도록 할 수 있습니다. (지연 쓰기 / 쓰기 캐시.)

공개 데이터(공개 포럼 게시물)는 개인 사용자 데이터(해시된 비밀번호 등)와 다른 폴더에 저장됩니다. 추가적인 장점은 공개 부분(게시물)이 유용하다고 생각하는 사람들을 위해 git 원격 저장소에 게시할 수 있다는 점입니다. 사용자 데이터는 로컬 전용 git 저장소(또는 사용자 지정, 원격, 비공개, 암호화된 git 저장소)에 유지됩니다.

여기에는 규모의 경제가 작용합니다. 이러한 엔지니어링 변경은 상당한 규모입니다. 만약 위의 제안이 가능하다면, 성능에 미치는 영향으로 인해 추가적인 운영 비용이 데이터베이스를 수정할 컨설턴트의 비용보다 훨씬 커질 가능성이 높습니다.

데이터베이스가 존재하는 이유는 대체 수단인 플랫 텍스트 파일보다 압도적으로 효율적이기 때문입니다.

소프트웨어는 무료이지만, 그 부분은 거기까지입니다. Discourse를 운영하는 비용을 지나치게 높이는 접근법을 홍보하는 것보다, Marketplace 토픽에 단기적으로 투자하는 것이 훨씬 낫습니다.

5개의 좋아요

TL;DR 아니요, 그건 원치 않습니다. 정말로 원치 않습니다.

더 많은 단순함에 대한 필요성을 이해합니다.

하지만.

1990년대에 저는 텍스트 파일 기반으로 구축된 인터넷 포럼(telnet BBS) 소프트웨어를 사용했습니다. 우리는 끊임없이 더 많고 더 나은 기능을 갈망했습니다. 데이터에 "열(column)"을 추가해야 했습니다. TAB을 추가하고 그 다음에 추가 열을 넣었습니다. 기존 파일 전체에 이를 적용해야 했습니다. 그런 다음 우리는 (또 다른) 데이터 조각을 제거하고 싶었습니다. 모든 파일을 순회하며 이 데이터 조각을 제거하는 awk 스크립트를 작성했습니다. 그 사이 소프트웨어를 유지보수 모드로 전환해야 했는데, 소프트웨어가 다른 수의 필드를 가진 텍스트 파일을 인식했기 때문입니다. 그것은 지옥이었습니다. 우리는 더 나은 시스템을 간절히 원했지만, 최소한의 리소스로 소프트웨어를 실행할 수 있어야 했기 때문에 파일 시스템만 사용할 수 있었습니다. 우리는… 데이터베이스가 필요했습니다.

그러나 성능만이 문제가 아닙니다. 텍스트 파일도 손상될 수 있습니다. 예를 들어 두 프로세스가 동시에 파일에 쓰는 경우입니다.

또한 참조 무결성(referential integrity)이라는 것도 있습니다. 이는 내부 참조가 존재한다는 것을 보장합니다(예: 이 게시물은 주제 #152787과 사용자 #406에 속합니다).

그리고 트랜잭션, 스냅샷, 복제, 로드 밸런싱도 있습니다.

물론, 데이터베이스가 고장 날 수 있습니다. 제 차는 어제 고장 났는데, 지나치게 복잡한 ABS 제어 소프트웨어가 작고 겉보기에는 관련이 없는 문제에 매우 취약하기 때문입니다. 혼자서 수리하는 것은 불가능합니다. 수리하려면 상당한 돈을 지불해야 합니다. 하지만 어디를 가든 걷는 것보다 장점이 훨씬 많습니다. 신뢰할 수 없나요? 아니요. 여전히 브레이크가 작동했고, 대시보드의 경고등으로 즉시 통보받았습니다.

데이터베이스는 텍스트 파일이 그렇지 못했기 때문에 신뢰성을 위해 만들어졌습니다.

16개의 좋아요

Richard의 비유가 적절합니다. Discourse의 데이터를 텍스트 파일로 관리하는 것은 불가능합니다.

또 다른 데이터베이스에 대한 지원을 추가하는 것만 해도 연간 약 20만 달러의 비용이 들 것입니다.

예산 범위를 정한 뒤 Marketplace 채널에서 데이터베이스 문제를 해결해 줄 사람을 찾는 것이 더 나을 수 있습니다. 몇 개의 레코드만 수정해야 하는 손상된 인덱스가 하나인지, 아니면 여러 개의 인덱스와 수십 개의 레코드를 수정해야 하는지 바로 명확하지 않기 때문에 견적을 내기 어려운 작업입니다.

7개의 좋아요

PG10에서 발견된 손상된 인덱스 문제는 우리가 주시하고 있으며, 여러분이 링크한 주제에서 모두의 이익을 위해 가능한 한 최대한 도움을 드리겠습니다. PG12에서는 이 문제에 대해 더 강건해질 것이며, 장기적으로 업그레이드를 통해 문제가 해결되기를 바랍니다.

하지만 "단순 텍스트 파일로 되돌리자"는 제안이 이 문제에 대한 적절한 해결책이라고는 절대 생각하지 않습니다.

10개의 좋아요

Postgres는 pg_dump라는 평문 백업 솔루션을 제공합니다.

pg_dump는 PostgreSQL 데이터베이스를 백업하는 유틸리티입니다.

스크립트 덤프는 데이터베이스가 저장된 시점의 상태로 재구성하는 데 필요한 SQL 명령을 포함하는 평문 파일입니다.

5개의 좋아요

고려해 주시고 답변해 주셔서 정말 감사합니다! 깊이 감사드립니다! :slight_smile:

3개의 좋아요

엄밀히 말하면, 텍스트 파일 묶음도 데이터베이스입니다. 다만, 중요한 용도나 성능이 필요한 용도로는 사용하기 어렵습니다.

2개의 좋아요