[SQL] 이 파일의 데이터에 액세스하거나 데이터베이스 서버에 빠른가요?
SQL이 파일의 데이터에 액세스하거나 데이터베이스 서버에 빠른가요?
나는 정적 데이터베이스가이 CGI 스크립트에 사용되는 고려, 액세스 및 조작이 빠른 SQL 서버 유형의 데이터베이스보다 것이다, 폴더 및 파일로 구성된이 있다면?
파일 및 폴더로 작업 할 때 더 나은 성능의 트릭은 무엇입니까?
해결법
-
==============================
1.나는 군중을 따라 달라집니다에 추가합니다.
나는 군중을 따라 달라집니다에 추가합니다.
이것은 더 일반적인 대답이 없습니다하지만 손의 상황에 크게 의존 질문의 종류이다. 일부 DB 접속 신뢰성 문제와 결합 된 DB의 오버 헤드, 플랫 파일에게 더 나은 선택을 사용하여 만들었 기 때문에 난 최근에 플랫 파일 시스템에 SQL 데이터베이스에서 일부 데이터를 이동했다.
선택을 할 때 내 자신에게 물어 것입니다 몇 가지 질문은 다음과 같습니다 :
-
==============================
2.어떤 정보가 어떤 액세스 패턴과 규모가에 따라 달라집니다. 관계형 데이터베이스의 가장 큰 장점 중 두 있습니다 :
어떤 정보가 어떤 액세스 패턴과 규모가에 따라 달라집니다. 관계형 데이터베이스의 가장 큰 장점 중 두 있습니다 :
그러나, 특정 전문 애플리케이션을 위해, 어느 쪽이이 개 혜택을 매니페스트 자체가 + 폴더 데이터 저장소 파일을 비교하지 않습니다 - 그러므로 대답은이 울려 퍼지는 "에 따라 다르다"는 것입니다.
파일 / 폴더에 관해서는, 트릭은 다음과 같습니다 :
-
==============================
3.일반적으로 데이터베이스 파일보다 느립니다.
일반적으로 데이터베이스 파일보다 느립니다.
당신이 파일의 색인이 필요한 경우 당신이 올바르게 할 경우, 사용자 정의 색인 구조에 하드 코딩 된 액세스 경로는 항상 빠른 될 가능성이있을 것이다.
그러나 '성능'파일 기반 솔루션을 통해 데이터베이스를 선택하여 목표는 아니다.
당신은 당신의 시스템이 데이터베이스를 제공 할 것이다 혜택을 필요가 있는지 스스로에게 물어해야합니다. 그렇다면, 다음, 약간의 성능 오버 헤드가 상당히 허용됩니다.
그래서:
기본적으로, 질문은 개발하기 쉬울 것보다 그 중입니다. 둘 사이의 성능 차이는 가치가 낭비 dev에 시간이 아니다.
-
==============================
4.경험의 내 작은 비트에서 서버 기반 데이터베이스 (로컬 컴퓨터에 봉사 심지어는) 로컬 파일 시스템에 비해 매우 느린 처리 속도를 가지고하는 경향이있다. 그러나,이 점근 적 복잡성되는 하나의 몇 가지에 따라 달라집니다. 항목, 데이터베이스 승리를 검색하는 색인이있는 데이터베이스를 사용에 대해 파일의 큰 목록을 검색 비교.
경험의 내 작은 비트에서 서버 기반 데이터베이스 (로컬 컴퓨터에 봉사 심지어는) 로컬 파일 시스템에 비해 매우 느린 처리 속도를 가지고하는 경향이있다. 그러나,이 점근 적 복잡성되는 하나의 몇 가지에 따라 달라집니다. 항목, 데이터베이스 승리를 검색하는 색인이있는 데이터베이스를 사용에 대해 파일의 큰 목록을 검색 비교.
경험의 나의 약간은 PostgreSQL을 함께합니다. 나는 3 만 개 행이있는 테이블이 있고, 나는 단지 8,000 레코드를 업데이트했다. 그것은 8 초 걸렸습니다.
견적에 관해서는 "조기 최적화는 모든 악의 뿌리입니다."나는 에누리이 걸릴 것이다. 데이터베이스를 사용하여 응용 프로그램을 작성하는 경우, 다음이 느린 발견, 그것은 (예를 들어, SQLite는) 파일 시스템 기반의 접근 방식 또는 뭔가 다른 스위치에 엄청난 시간이 걸릴 수 있습니다. 나는 당신의 가장 좋은 방법은 작업 부하의 매우 간단한 프로토 타입을 만들라고하고, 두 가지 접근 방식으로 테스트한다. 나는 빨리이 경우 어떤 아는 것이 중요하다 생각합니다.
-
==============================
5.다른 사람들이 지적했듯이 : 그것은 달려!
다른 사람들이 지적했듯이 : 그것은 달려!
당신이 정말로 당신의 목적을 위해 더 확대됨에 될 것입니다 어떤 찾아야 할 경우 각 형식의 저장소에 일부 샘플 데이터를 생성 한 후 몇 가지 벤치 마크를 실행 할 수 있습니다. Benchmark.pm 모듈은 펄과 함께 제공, 그것은 매우 간단 같은 뭔가 나란히 비교를 할 수 있습니다 :
use Benchmark qw(:all) ; my $count = 1000; # Some large-ish number of trials is recommended. cmpthese($count, { 'File System' => sub { ...your filesystem code... }, 'Database' => sub { ...your database code... } });
당신은보다 완벽한 문서를 얻기 위해 perldoc을 벤치 마크를 입력 할 수 있습니다.
-
==============================
6.이 사이트 구조가 적합한 경우 이미지에 관해서 DB 대신 파일을 사용하는 것은 매우 유용합니다. 내부 사용자의 일치하는 데이터 및 장소의 이미지를 대표하는 폴더를 생성합니다. 예를 들어, 당신은 당신은 DB에 당신의 기사를 저장, 기사 사이트가 있습니다. 당신은 1,2,3 같은 기본 키를 사용하여 DB에 이미지 경로 이름의 폴더를 배치해야 .. 내부 이미지를 넣지 마십시오. 전자 책, 음악 파일, 비디오,이 방법은 모든 미디어 파일에 사용할 수 있습니다. 당신이 뭔가를 검색하지 않을 경우 같은 논리는 XML 파일로 작동합니다.
이 사이트 구조가 적합한 경우 이미지에 관해서 DB 대신 파일을 사용하는 것은 매우 유용합니다. 내부 사용자의 일치하는 데이터 및 장소의 이미지를 대표하는 폴더를 생성합니다. 예를 들어, 당신은 당신은 DB에 당신의 기사를 저장, 기사 사이트가 있습니다. 당신은 1,2,3 같은 기본 키를 사용하여 DB에 이미지 경로 이름의 폴더를 배치해야 .. 내부 이미지를 넣지 마십시오. 전자 책, 음악 파일, 비디오,이 방법은 모든 미디어 파일에 사용할 수 있습니다. 당신이 뭔가를 검색하지 않을 경우 같은 논리는 XML 파일로 작동합니다.
-
==============================
7.그것은 액세스 그것에 데이터의 프로파일과 어떤 논리를 사용 할 예정에 따라 달라집니다. 당신은 단순히 다음라는 이름의 노드를 저장하고 인출해야하는 경우 파일 시스템 기반 데이터베이스는보다 신속하고 효율적으로 할 수있다. 당신이 인덱스 기반 검색을 수행해야하는 경우 (당신은 또한. 그 목적 버클리 DB를 살펴 가질 수), 특히 당신이 키를 기준으로 다른 데이터 집합에 가입해야하는 경우, 다음 SQL 데이터베이스는 가장 좋은 방법입니다.
그것은 액세스 그것에 데이터의 프로파일과 어떤 논리를 사용 할 예정에 따라 달라집니다. 당신은 단순히 다음라는 이름의 노드를 저장하고 인출해야하는 경우 파일 시스템 기반 데이터베이스는보다 신속하고 효율적으로 할 수있다. 당신이 인덱스 기반 검색을 수행해야하는 경우 (당신은 또한. 그 목적 버클리 DB를 살펴 가질 수), 특히 당신이 키를 기준으로 다른 데이터 집합에 가입해야하는 경우, 다음 SQL 데이터베이스는 가장 좋은 방법입니다.
난 그냥 응용 프로그램에 대한 가장 자연스러운 것 같습니다 어떤 솔루션을 갈 것입니다.
-
==============================
8.다른 사람이 말했듯이, 그것은 따라 달라집니다 크기와 데이터의 성격과 운영에 당신이있는 거 계획이 그것을 실행합니다.
다른 사람이 말했듯이, 그것은 따라 달라집니다 크기와 데이터의 성격과 운영에 당신이있는 거 계획이 그것을 실행합니다.
특히 CGI 스크립트를 들어, 페이지를 조회 할 때마다 데이터베이스 서버에 연결하기위한 성능 저하가 발생할 것입니다. 당신은 순진 파일 기반 접근 방식을 만들 경우, 당신은 쉽게 악화 성능 문제를 만들 수 있습니다 ;-)
뿐만 아니라 버클리 DB 파일 솔루션으로 당신은 또한 SQLite는 사용을 고려할 수 있습니다. 이것은 로컬 파일에 저장된 데이터베이스에 대한 SQL 인터페이스를 만듭니다. 당신은 DBI와 SQL에 액세스 할 수 있지만 서버 구성 또는 네트워크 프로토콜은 없습니다. (: 여러 프런트 엔드 서버가있는 것을 결정하는 경우에, 그러나 공유 상태로 필요 예)이 데이터베이스 서버는 미래에 필요한 경우 쉽게 마이그레이션을 허용 할 수 있습니다.
어떤 내용을 모른 채, 나는 성능을 검토 한 후 SQLite는 / DBI 솔루션을 사용하는 것이 좋습니다 것입니다. 이것은 비교적 간단한 시작 위 괜찮은 성능과 유연성을 제공 할 것입니다.
-
==============================
9.당신이 무엇을하고 있는지에 따라 신속하게 액세스 파일하기 위해, mmap에 매우 편리 할 수 있습니다. 난 그냥 그들을 소리내어 대신 메모리 맵 파일과 효과적인 펄 블로그에 이것에 대해 썼다.
당신이 무엇을하고 있는지에 따라 신속하게 액세스 파일하기 위해, mmap에 매우 편리 할 수 있습니다. 난 그냥 그들을 소리내어 대신 메모리 맵 파일과 효과적인 펄 블로그에 이것에 대해 썼다.
그러나, 나는 데이터베이스 서버가 훨씬 더 빨리 될 것이라고 기대한다. 그것은 우리가 종류의 데이터를 액세스 할 필요가 당신이 무엇을하고 있는지 모르고,이 없다, 등등 때 빨리 당신을위한 것입니다 무슨 말을하기는 어렵습니다.
-
==============================
10.다른 말했듯 DB는 도구이며, 약간의 오버 헤드를 생성하지만 경우에 데이터가 정적 인 경우는 읽기 전용 파일 위치에서 디렉토리를 읽어 데이터를 빠르게 될 것입니다 : 여기에 내가했던 몇 가지 시험은 다음과 같습니다 : 나는 .CSV로 파일의 이름으로 파일을했다 데이터베이스에서 나는 데이터베이스에서 같은 기록을 찾기 위해 '일'과 같은 인덱스 열을했다. 매일 30K - 50K 기록 / 행들 및 데이터의 상이한 유형 (90 % 수레)의 열 (100)을 갖는다.
다른 말했듯 DB는 도구이며, 약간의 오버 헤드를 생성하지만 경우에 데이터가 정적 인 경우는 읽기 전용 파일 위치에서 디렉토리를 읽어 데이터를 빠르게 될 것입니다 : 여기에 내가했던 몇 가지 시험은 다음과 같습니다 : 나는 .CSV로 파일의 이름으로 파일을했다 데이터베이스에서 나는 데이터베이스에서 같은 기록을 찾기 위해 '일'과 같은 인덱스 열을했다. 매일 30K - 50K 기록 / 행들 및 데이터의 상이한 유형 (90 % 수레)의 열 (100)을 갖는다.
DB 정보 : RAM의 PostgreSQL의 11.5 16 기가 바이트
Table: 335,162,867 records Table size: 110GB Index size: 7GB Total size: 117GB Files: Number of files: 8033 Total Files size: 158GB Number of records/lines per file/date: 30K - 50K
-
==============================
11.나는 당신에게 다른 사람들이 준 같은 대답을 줄거야 때에 따라 다르지
나는 당신에게 다른 사람들이 준 같은 대답을 줄거야 때에 따라 다르지
반환 데이터 (읽기 전용)하는 하나의 서버와 간단한 시나리오에서 예 파일 시스템은 관리가 용이 좋을 것이다.
하나 개 이상의 서버가있을 때, 당신은 등 글루 스터 FS (GlusterFS), ceph, 같은 분산 파일을 시스템을 관리해야합니다 ..
데이터베이스는 당신을 위해 모두를 관리 할 수있는 도구, 분산 파일 시스템, 압축, 읽기 / 쓰기, 잠금 장치 등입니다 ..
그게 도움이되기를 바랍니다.
from https://stackoverflow.com/questions/2147902/is-it-faster-to-access-data-from-files-or-a-database-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] PostgreSQL의 배열 요소 순서와 배열 형으로 가입, 어떻게 구현하는 방법? (0) | 2020.06.03 |
---|---|
[SQL] 어떻게 Golang를 사용하여 SQL에서 IN 조회를 실행하려면? (0) | 2020.06.03 |
[SQL] 시간 부분을 무시 T-SQL에서 비교 날짜, (0) | 2020.06.02 |
[SQL] 어떻게 Laravel 5.1 원시 쿼리를 실행하려면? (0) | 2020.06.02 |
[SQL] 스크립트 전체 데이터베이스의 SQL-서버 (0) | 2020.06.02 |