태그 보관물: performance

performance

SQLite 데이터베이스의 실제 실제 최대 크기는 얼마입니까? 할 수 ​​있더라도

SQLite의 적절한 사용에 관한 이 기사에 따르면 SQLite는 140 테라 바이트 로 제한되지만 클라이언트 / 서버 RDBMS는 더 잘 작동 할 수 있다고합니다.

SQLite 데이터베이스의 크기는 140 테라 바이트 (2 47 바이트, 128 티비 바이트)로 제한됩니다. 더 큰 데이터베이스를 처리 할 수 ​​있더라도 SQLite는 전체 데이터베이스를 단일 디스크 파일에 저장하며 많은 파일 시스템은 파일의 최대 크기를 이보다 작은 것으로 제한합니다. 따라서이 정도 규모의 데이터베이스를 고려할 경우 여러 디스크 파일 또는 여러 볼륨에 해당 컨텐츠를 분산시키는 클라이언트 / 서버 데이터베이스 엔진을 사용하는 것이 좋습니다.

일반적으로 이에 동의하지만 SQLite의 최대 제한이 너무 높다는 사실에 놀랐습니다! 내 경험상 ~ 30-100GB 크기의 SQL Server 데이터베이스를 많이 사용했습니다. 또한 Oracle, Postgres 또는 Cassandra를 사용하여 훨씬 더 큰 데이터베이스를 간접적으로 사용했습니다. 적어도 내 지식으로는 140TB에 접근하는 사람이 없었습니다. 저는 DBA가 아니기 때문에 이것이 직접 경험에서 “큰”것으로 간주됩니다.

데이터베이스가 작을 때 SQLite 만 고려했습니다. 최대 수십 메가 바이트.

이 기사를 읽은 후에도 여전히 수백 기가 바이트가 필요한 SQLite를 고려하지는 않습니다. 그러나 그 기능을 과소 평가했는지 궁금합니다. 실제 사용에서 SQLite 데이터베이스에 대한 현실적인 최대 크기 제한은 무엇입니까?



답변

Sqlite 데이터베이스 크기의 실제 한계는 데이터 파일의 실제 한계와 동일합니다. 그리고 그 한계는 많은 컴퓨터와 시스템에 달려 있습니다. 현재 Linux 데스크톱에서는 350Gbyte 파일보다 훨씬 더 큰 여유 공간이 없습니다. 경험상 하나의 파일이 디스크 파티션의 절반 이상을 차지하지 않기 때문입니다. BTW, 그 실제 한계는 PostGreSQL 또는 MariaDB와 같은 다른 SQL RDBMS에도 영향을 미칩니다 (그러나 이들 중 대부분은 여러 파일에 데이터를 보관하여 다른 파일 시스템에 보관할 수 있으며 일부는 원격 컴퓨터에서 분산 데이터를 관리 할 수 ​​있습니다.) .)

이 기사를 읽은 후에도 여전히 수백 기가 바이트가 필요한 SQLite를 고려하지는 않습니다.

당신은 옳고 그름입니다.

오늘날의 컴퓨터 (수퍼 컴퓨터 또는 데이터 센터 서버가 아닌 랩탑 및 데스크탑)에서는 100 기가 바이트가 여전히 큰 디스크 공간이기 때문에 옳습니다. 따라서 실제로 이러한 큰 데이터베이스를 생각하면 원격 액세스, 효과적으로 동시 액세스 및 분산 데이터 및 테이블을 원할 수 있기 때문에 특히 실제 SQL 서버 (La PostGreSQL)를 더 잘 상상할 수 있습니다.

SQLite가 큰 파일을 처리 할 수있는 파일 시스템이 있다고 가정 할 때 아마도 SQLite가 수백 기가 바이트의 데이터베이스를 처리 할 수 ​​있고 때로는 테스트를 받았기 때문에 (원칙적으로 시도하지 않았습니다) 잘못되었습니다. 적어도).

필자는 수십 기가 바이트의 데이터베이스에 대해 SQLite를 고려할 것입니다. (그리고 한 번 큰 .sqlite파일 인 IIRC 40Gbyte를 시도했습니다). 현재 (슈퍼 컴퓨터가 아닌) 컴퓨터에서는 수백 기가 바이트의 SQLite 데이터베이스를 보유하는 것이 주저 할 것입니다. 이러한 파일이 오늘날의 관행에 의해 상당히 크기 때문입니다.

IIRC 특수 파일 시스템 머신을 판매하는 일부 하드웨어 공급 업체가 테라 바이트 sqlite 응용 프로그램 중 하나에 대해 이야기했습니다 (그러나 잘못되었을 수 있음).

물론 SQLite는 성능 (모든 SQL 데이터베이스 등) 따라 많은 테이블, 그들의 인덱스 관련 SQL 쿼리의 수와 폭. 그리고 당신은 (여러 프로세스에 의해) 동시 액세스를 원하지 않고 트랜잭션을 사용해야합니다 (경험, 심지어 몇 메가 바이트의 작은 SQLITE 데이터베이스에서도). 예를 들어 수천 개의 삽입 요청을 BEGIN TRANSACTION& END TRANSACTION, 그렇게하지 않으면 Sqlite가 10 배 이상으로 크게 느려집니다).

적절한 구성과 구성으로 개인적인 경험을 통해 SQLite는 사용 가능한 RAM보다 큰 데이터베이스를 관리 할 수 ​​있습니다 (따라서 30GB는 문제가되지 않습니다). 그러나 인덱스가 RAM에 맞기를 원할 것입니다!

“슈퍼 컴퓨터”또는 고가의 워크 스테이션 (예 : 512GB RAM 및 8Tbyte 디스크 및 512Gbyte SSD)을 위해 무언가를 코딩하는 경우 테라 바이트 Sqlite 데이터베이스를 가질 수 있습니다. 그러나 프로세스 중 하나 (또는 ​​소수) 만 해당 데이터베이스에 액세스하는 경우에만 그렇게하려고합니다. 동일한 데이터베이스에 동시에 액세스하는 수십 개의 프로세스가있는 경우 실제 SQL RDBMS (Maria Maria 또는 PostGreSQL)를 더 잘 설치하십시오.

또한 .sqlite데이터베이스 파일 의 (이진) 형식 이 “이동식”으로 문서화 되어 있지만 데이터베이스를 SQL 텍스트 형식 (을 사용하여 sqlite3 mydb.sqlite .dump > mydb.sql) 으로 백업하는 것을 선호합니다 . 그런 다음 해당 텍스트 덤프를위한 추가 디스크 공간이 필요합니다 (실제 한계를 낮 춥니 다).

일반적으로 Sqlite는 병목 현상이 아닙니다. 그러나 디스크 일 수 있습니다.

추신. 동일한 추론이 GDBM을 사용하여 대형 색인 파일에 적용될 수 있습니다 .

PPS. MELT 모니터 (github의 GPLv3 무료 소프트웨어)의 expjs 분기 ( 2016 년 9 월) 에서 신선한 Sqlite 데이터베이스 내에서 JSON의 전체 응용 프로그램 힙을 유지 하고 있습니다. 나는 놀랄 일도없이 수백만 개의 물체 ( ‘큰’)로 작은 실험을 해왔다. YMMV.


답변