문제

일반 텍스트 파일을 사용하여 데이터를 큰 MySQL 데이터베이스에 저장하지 않고 서버에 데이터를 저장하려고합니다. 문제는 수천 개의 폴더와 수십만 개의 파일을 생성 할 가능성이 있다는 것입니다 (확장 해야하는 경우). 이 작업에 문제가있는 것은 무엇입니까? 정말 느립니다. 데이터베이스를 사용하는 것과 같은 성능입니까?

의미하는 바 : 블로그 테이블을 저장하는 데이터베이스가있는 대신 "author", "message"및 "date"가 포함 된 행이 있습니다. 그 폴더는 "저자", "메시지"및 "날짜"가 저장되어 있습니다.

도움이 되었습니까?

해결책

이것은 데이터베이스보다 읽기가 엄청나게 느려질 것입니다 (파일은 모두 같은 속도로 모든 것이 발생합니다. 메모리에 쓰기를 저장할 수는 없습니다).

데이터베이스는 최적화되어 있으며 구조 데이터. 파일 시스템은 아닙니다. 파일 시스템으로 데이터베이스를 복제하는 것은 실수입니다. 결국 데이터베이스 열을 색인 할 수 있지만 다른 도구없이 파일 시스템을 색인하기가 어렵습니다.

데이터베이스는 신속한 데이터 액세스 및 검색을 위해 구축되었습니다. 파일 시스템은 데이터 저장을 위해 구축되었습니다. 작업에 적합한 도구를 사용하십시오. 이 경우 절대적으로 데이터베이스입니다.

즉, 게시물에 대한 HTML 파일을 만들고 해당 로케일을 DB에 저장하여 쉽게 얻을 수 있도록 해당 로케일을 저장하려면 확실히 좋은 솔루션 (LA 이동식 유형)입니다.

그러나 이러한 것들을 파일 시스템에 저장하면 최신 게시물을 어떻게 찾을 수 있습니까? 가장 많은 작가? 논쟁의 여지가있는 작가? 이러한 모든 것들은 데이터베이스와 함께 사소하고 파일 시스템에서는 매우 어렵습니다. 데이터베이스를 고수하면 기뻐할 것입니다.

다른 팁

실제로는 다음과 같습니다.

  • 파일 크기는 무엇입니까?
  • 내구성 요구 사항은 무엇입니까?
  • 얼마나 많은 업데이트를 수행합니까?
  • 파일 시스템이란 무엇입니까?

MySQL이 더 빠를 것임은 분명하지 않습니다.

나는 한 번 그런 비교를했다 작은 객체를 세션 스토리지로 사용하려면 CPPCMS. 하나의 인덱스 (키에만 해당)와 두 개의 인덱스 (1 차 키 및 보조 시간 초과)가 있습니다.

File System:   XFS     ext3 
-----------------------------
Writes/s:      322     20,000

Data Base \  Indexes:    Key Only   Key+Timeout
-----------------------------------------------
Berkeley DB              34,400      1,450
Sqlite No Sync            4,600      3,400
Sqlite Delayed Commit    20,800     11,700

보시다시피, 간단한 ext3 파일 시스템과 함께 SQLITE3만큼 빠르거나 빠릅니다. 저장 데이터가 (d)를 제공하지 않기 때문에 데이터.

반면에 ... DB는 당신에게 필요한 많은 중요한 기능을 제공하므로 실제로 필요하지 않으면 파일을 스토리지로 사용하지 않는 것이 좋습니다.

DB를 기억하십시오 항상 그런 것은 아닙니다 시스템의 병 목

긴 씨족의 답을 잊어 버리십시오. 일반 텍스트 파일에 데이터를 저장하는 것이 나쁜 아이디어 인 가장 간단한 이유는 다음과 같습니다.

  1. 쿼리가 거의 불가능합니다. 날짜별로 블로그 게시물을 어떻게 정렬 하시겠습니까? 모든 파일을 읽고 날짜를 비교하거나 자신의 색인 파일을 유지해야합니다 (기본적으로 자신의 데이터베이스 시스템을 작성하십시오.)

  2. 백업의 악몽입니다. tar cjf 잘라 내지 않으며 시도하면 일관되지 않은 스냅 샷으로 끝날 수 있습니다.

파일을 사용하지 않는 다른 좋은 이유가 12 개있을 것입니다. 성능을 모니터링하기가 어렵고, 디버그하기가 매우 어렵고, 오류의 경우 복구하기가 거의 불가능하며, 처리 할 도구가 없습니다.

여기서 핵심은 귀하의 데이터에 색인이 없을 것이라고 생각합니다. 따라서 인덱스 데이터베이스에 비해 검색이 느리게 느려질 것입니다. 또한 IO 작업이 비싸고 데이터베이스는 메모리에 (부분적으로) (부분적으로) 데이터를 훨씬 빠르게 사용할 수 있습니다.

왜 데이터베이스를 직접 사용하지 않는지 말하지는 않습니다 ... 그러나 시나리오에서는 몇 가지 이유로 언제든지 폴더를 통해 DB를 사용할 것이라고 설명합니다. 우선, 블로그 시나리오는 매우 간단 해 보이지만 언젠가 검색, 더 많은 게시물 세부 사항, 카테고리 등과 같은 더 많은 기능으로 확장하고 싶다고 상상하기가 매우 쉽습니다.

모델을 성장시키는 것은 DB보다 폴더 구조에서 수행하기가 더 어려울 것이라고 생각합니다.

또한 데이터베이스는 일반적으로 인덱싱 및 메모리 캐싱으로 인해 파일 액세스가 훨씬 빠릅니다.

IIRC FUDFORUM은 속도의 이유로 파일 저장소를 사용했으며 DB 인덱스를 검색하고 DB에서 데이터를 검색하여 사용자에게 보낸 것보다 파일을 잡는 것이 훨씬 빠를 수 있습니다. 파일 시스템 인터페이스를 DB 및 DB-Library 인터페이스와 거래하고 있습니다.

그러나 이것이 더 빠르거나 느리게 될 것이라는 의미는 아닙니다. 파일 시스템에서는 글쓰기가 더 빠르지만 일반적인 문제에 대해서는 DB에서 더 빨리 읽을 수 있다고 생각합니다. Fudforum과 마찬가지로 여러 게시물을 하나로 표시하려는 비교적 불변의 데이터가 있으면 파일-기본 접근 방식이 훨씬 더 빠를 수 있습니다. 예를 들어 모든 관련 게시물을 검색 할 필요는 없습니다. 1 개의 텍스트 파일을 한 번 표시합니다. 이러한 종류의 최적화를 사용할 수 있다면 파일 기반 접근 방식이 작동합니다.

또한 메일 서버는 파일 기반 접근 방식에서도 작동하며 MailDir 형식은 각 이메일 메시지를 데이터베이스가 아닌 디렉토리의 파일로 저장합니다.

그래도 내가 말하는 한 가지는 3이 아닌 1 파일로 모든 것을 더 잘 저장할 것입니다. 파일 시스템은 여러 파일보다 단일 파일을 읽고 (및 캐싱) 더 좋습니다. 따라서 각 메시지를 3 부분으로 저장하려면 단일 파일로 모두 저장하고 읽고 부품을 가져 와서 표시하려는 부분을 표시하십시오.

... 그런 다음 저자가 모든 게시물을 검색하고 간단한 SQL 쿼리 대신 백만 파일을 읽게됩니다 ...

데이터베이스는 빠르지 않습니다. 그것에 대해 생각하십시오 : 결국 그들은 파일 시스템에도 데이터를 저장합니다. 따라서 데이터베이스가 더 빠른 경우에 대한 질문은 액세스 경로에 크게 의존합니다.

파일 구조와 상관 관계가있는 액세스 경로가 하나만있는 경우 파일 시스템이 데이터베이스보다 훨씬 빠를 수 있습니다. 파일 시스템에 캐싱을 사용할 수 있는지 확인하십시오.

물론 데이터베이스의 모든 좋은 것들을 느슨하게합니다. - 트랜잭션 - 데이터를 색인화하는 유연한 방법으로, 데이터에 합리적으로 빠르게 데이터에 액세스 할 수 있습니다. - 유연성 (못생긴) 쿼리 언어 - 높은 복구 가능성.

스케일링은 실제로 사용 된 파일 시스템에 따라 다릅니다. AFAIK 대부분의 파일 시스템에는 파일 수 (완전히 또는 디렉토리 당)에 대한 상한이 있지만 새로운 것은 종종 매우 높습니다. 디렉토리 구조가있는 수백, 수천 개의 파일의 경우 디렉토리를 합리적인 크기로 유지하기 위해 잘 수행하는 파일 시스템을 찾을 수 있어야합니다.

@Eric의 의견 : 필요한 것에 달려 있습니다. 쿼리 당 파일에 정확한 내용 만 필요하고 파일의 위치와 이름을 결정 론적 방식으로 결정할 수 있습니다. 직접 액세스가 데이터베이스가하는 것보다 더 빠릅니다.

  • 많은 인덱스 항목에 액세스하기 위해
  • 많은 테이블 행에 액세스하십시오 (RDBMS는 일반적으로 여러 행이 포함 된 블록을 읽습니다)
  • 블록에서 단일 행을 선택하십시오.

당신이 그것을 보면 : 당신은 메모리에 인덱스와 추가 행이있어, 캐싱이 비효율적으로 만들어지면, DB의 속도는 어디에서 왔습니까?

데이터베이스는 일반적인 경우에 좋습니다. 그러나 특별한 경우가 있다면 거의 항상 어떤 의미에서 더 나은 특별한 솔루션이 있습니다.

RDBMS를 사용하는 것이 선호된다면 다른 오픈 소스 키 값 또는 문서 DBS (비 관계형 DBS)를 시도해 보지 않겠습니까?

ur 게시물에서 나는 ur international db의 산성 특성을 따르지 않는다는 것을 이해합니다. 자신의 파일 시스템 구현 대신 다른 키 값 DB (MongoDB, CoutchDB 또는 하이퍼 가능)를 조정하는 것이 좋습니다. 더 나은 성능을 제공합니다. 기존 접근법보다 ..

메모: 나는 또한 이것에 대한 전문가가 아닙니다. 방금 MongoDB에서 일하기 시작했고 비슷한 시나리오에서 유용한 것을 발견했습니다. 이러한 접근 방식을 모르는 경우를 대비하여 공유하고 싶었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top