텍스트 파일의 데이터를 구문 분석하는 것보다 데이터베이스를 사용해야하는 경우는 언제입니까?


13

codereview.SE 의 성장을 측정하기 위해 Python 프로그램을 만들고 있었습니다 . 내 접근 방식은 첫 페이지에 "사이트 통계"를 표시하여 하드 드라이브에 저장하는 것이 었습니다. 나는 이것을 매일 한 번씩 할 계획이다. 지금까지 통계를 가져 와서 텍스트 파일에 추가하기에 충분했습니다. 파이썬 스크립트는 github에서 볼 수 있습니다 . 내가 사용하는 형식은 다음과 같습니다

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

파일에서 사용할 형식을 얻기 위해 스크립트를 두 번 실행했습니다. 처음에는 이것이 나 자신을 저장하고 형식이 동일하므로 쉽게 구문 분석 될 수 있지만 확실하지 않기 때문에 나에게 좋게 보였습니다. 데이터 검색이 더 쉬워야하기 때문에 데이터베이스를 사용하는 것이 더 나은 것 같습니다. 참고로, 나는 데이터베이스를 사용한 적이 없으며 SQL, MySQL 또는 다른 RDBMS 변형에 대한 지식이 없습니다.

그래서 이것은 나에게 질문을 가져옵니다. 데이터를 텍스트 파일로 저장하는 것보다 데이터를 저장하기 위해 데이터베이스를 언제 선호해야합니까? 데이터베이스 또는 간단한 텍스트 파일이 필요한지 결정할 때 찾을 수있는 몇 가지 사항이 있습니까?

추신 : 더 나은 태그를 추가 할 수 있다면 그렇게하십시오. 추가 할 수있는 태그에 대해 약간의 의심이있었습니다.


"모든 도구는 사용법을 익힐 때까지 책임이 있습니다."
JeffO

1
데이터베이스는 프로젝트에 적합하거나 적합하지 않을 수 있습니다. 그러나 더 간단한 형식을 사용하면 도움이 될 수 있습니다. 파이썬에서 표준으로 사용하는 CSV 모듈이 있습니다. CSV가 있으면 데이터를 다른 프로그램 (예 : 스프레드 시트로 내보내 그래프로 표시)으로 간단하게 내보낼 수 있습니다.
Sean McSomething

답변:


14

데이터를 텍스트 파일로 저장하는 것보다 데이터를 저장하기 위해 데이터베이스를 언제 선호해야합니까?

Wikipedia 데이터베이스가 체계적인 데이터 모음 이라는 것을 알려줍니다 . 이 방법으로 텍스트 파일 데이터베이스입니다. 계속해서 말합니다.

데이터는 일반적으로이 정보가 필요한 프로세스를 지원하는 방식으로 현실의 관련 측면을 모델링하도록 구성됩니다. 예를 들어, 비어있는 호텔을 찾는 것을 지원하는 방식으로 호텔의 객실 가용성을 모델링합니다.

이 부분은 주관적입니다. 데이터를 어떻게 모델링해야하는지 또는 어떤 작업을 최적화해야하는지 구체적으로 알려주지는 않습니다. 텍스트 파일은 매일 하나씩 여러 개의 개별 레코드로 구성되므로 문제와 관련이있는 방식으로 현실의 측면을 모델링합니다.

"데이터베이스"라고 말하면 일종의 관계형 데이터베이스 관리 시스템을 생각하고 있지만 텍스트 파일을 데이터베이스로 생각하면 "데이터베이스를 언제 사용해야합니까?"에서 질문이 변경된다는 것을 알고 있습니다. "어떤 종류의 데이터베이스를 사용해야합니까?" 그러한 관점에서 볼 때 답을보다 쉽게 ​​확인할 수 있습니다. 더 이상 요구 사항을 충족하지 못하는 데이터베이스를 사용하면 더 나은 데이터베이스를 사용 하십시오 .

파이썬 스크립트와 간단한 텍스트 파일이 제대로 작동하면 변경할 필요가 없습니다. 매일 하나의 새로운 기록과 매년 컴퓨터가 빨라짐에 따라 현재 솔루션을 오랫동안 사용할 수있을 것으로 생각됩니다. 10 년 분량의 데이터는 일단 분석하면 75 킬로바이트 미만이 필요한 3650 개의 레코드 만 제공합니다.

하루에 하나의 작은 레코드 대신 CodeReview에 대한 모든 질문, 질문 한 사람 및시기를 기록하기로 결정했다고 상상해보십시오. 또한 모든 답변과 관련 메타 데이터도 수집합니다. 당신은 수있는 텍스트 파일에 모든 것을 저장하지만, 플랫 파일은 당신이 그것을 필요로 할 때 어려운 정보를 찾을 수 있도록한다. 전체 내용을 메모리로 읽을 수있는 데이터가 너무 많으므로 질문이나 답변을 찾으려면 원하는 내용을 찾을 때까지 파일을 스캔해야합니다. 특정 사용자가 요청한 모든 질문을 찾으려면 전체 파일을 검색해야합니다. 태그로 "버그"가있는 모든 질문을 찾으려면 파일을 스캔해야합니다.

엄청나게 느리므로 주어진 레코드를 찾기 위해 파일에서 찾을 위치를 알려주는 인덱스를 작성하여 속도를 높이기로 결정할 수 있습니다. 질문에 대한 색인, 사용자에 대한 색인, 답변에 대한 색인 등을 가질 수 있습니다. 질문을 찾으려면 (훨씬 작은) 질문 색인을 검색하고 주 데이터 파일에서 질문의 위치를 ​​찾은 다음 파일의 올바른 지점으로 빠르게 이동하십시오. 성능이 크게 향상되었습니다. 실제로 이는 데이터베이스 관리 시스템과 거의 같습니다.

따라서 필요할 때 DBMS를 사용하십시오. 데이터가 많을 때, 데이터를 신속하게 그리고 아마도 처음부터 완전히 예측할 수없는 방식으로 액세스 할 수 있어야 할 때 사용하십시오. 서로 연결된 여러 종류의 데이터 (다른 종류의 레코드)가 있는 경우 다양한 레코드를 적절하게 연결할 수 있도록 RDBMS를 사용하십시오 .


3
"텍스트 파일을 데이터베이스로 생각하는 것은 매우 통찰력이 있습니다." 또한 3650 개의 항목 만있는 부분이 도움이되었습니다. 문제의 실제 관점을 얻는 데 도움이되었습니다.
Aseem Bansal

1
과소 평가 된 답변으로, 두 번째로 돌아 왔습니다.
Hashim

6

데이터베이스에는 많은 장점이 있지만 액세스를 더 쉽게 만드는 것은 그 중 하나가 아닙니다. 내장 된 명령 하위 언어로 더 빠르고 표준화되고 해석 가능하지만 더 안전하지만 더 쉽지는 않습니다. 언어와 표준 라이브러리가 제공하는 구문 설탕의 양에 관계없이 우선 데이터베이스를 가지고 있어야하며, 연결을 열고 프로그램에서 완전히 다른 방식으로 데이터를 라우팅해야합니다. 당신이하는 일에 아무런 문제가없고, 프로그래밍의 용이함이 최우선이라면, "좋은 습관"이라고 생각하기 때문에 데이터베이스로 전환하지 마십시오.

전환시기는 역사적 발전을 따르는 것입니다. 결국 사람들은 관계형 DB가 발명되기 전에 오랫동안 파일에 데이터를 저장했으며 실제로 그 이전에는 열등한 데이터베이스 모델 (계층 적 DB, 네트워크 DB ...)이 많이 발명되었습니다. 그들은 데이터베이스를 쓰기 시작했고, 이것이 주요 처리 노력을 절약 하고 전체적으로 그리고 장기적으로 신뢰성 등을 증가시킬 것이라는 것이 명확 해졌을 때 사용했습니다 . 그것이 당신에게 해당되지 않는 한, 당신은 그것이 곧 사건이 될 것이라고 예상하지 않는다면, 스위칭은 과도하게 엔지니어링 될 것입니다.


전반적인 디자인에 따라 응집력이 더 우수하지 않습니까? 예를 들어 제 경우에는 각 날짜에 해당하는 5 개의 값을 저장하고 있습니다. 현재 상태에서는 데이터간에 응집력이 없습니다.
Aseem Bansal

모든 레코드가 일관된 필드 세트와 값을 갖는지 확인하는 것이 맞습니다. (엄밀히 말하면 관계형 데이터베이스 일뿐 입니다. 사람들은 생산에 관계형이 아닌 데이터베이스를 오랫동안 사용했으며 현재는 "NoSQL"운동으로 다시 주목을 받고 있습니다.
Kilian Foth

3

물론 이것은 판단 요청이지만, 내가 고려할 세 가지 주요 기준은 ACID를 준수해야하는지, 데이터가 얼마나 복잡한 지, 마지막으로 얼마나 많은 것들을 읽고 쓸 필요가 있는지입니다. 단순히 한 줄에 한 줄씩 읽고 쓰고 앱이 읽기 또는 쓰기를 수행하는 유일한 앱이라면 데이터베이스를 건너 뛸 수 있습니다. 여러 앱이 읽기 또는 쓰기를 시작하거나 데이터 구조가 복잡해지면 (특히 별도 회선간에 관계가있는 경우) DB가 실제로 매력적으로 보이기 시작합니다.


"읽고 쓰는 데 필요한 것들"-도움이되었습니다.
Aseem Bansal

2

데이터베이스는 데이터를 저장하는 것뿐만 아니라 데이터를 조작하고 쿼리하는 데 사용되므로 교육을받은 결정을 내려야합니다.

큰 요소는 머신에 데이터베이스를 설치하여 얻는 기능과 얻을 수있는 기능의 이점입니다

데이터를 쿼리하고 조작해야하고 액세스 속도를 높이고 싶다면 다른 기능을 위해 데이터베이스를 사용하는 것도 좋은 방법입니다. 데이터베이스 스토리지 모델을 사용하면 키 값으로 데이터를 매우 빠르게 조회 할 수 있으며 파일 구문 분석 이 느릴 있습니다 (어떻게 수행하는지에 따라 다름)

SQL을 사용하고 무엇을 할 수 있는지 알고 싶다면 SQLFiddle.com에는 여러 가지 RDBMS 모델이 있습니다 (조회 실행, 스키마 작성 등).


Python에는에 대한 표준 라이브러리 인터페이스가 내장되어 sqlite3있습니다. 따라서 데이터베이스 설치는 문제가되지 않습니다. 데이터를 계속 저장하면 인덱싱이 없으면 속도가 느려질 수 있습니다. 데이터베이스가이를 처리 할 수 ​​있다고 생각합니다. sqlite3을 별도로 다운로드하여 배우고 데이터베이스를 사용하기 전에 데이터베이스 모델에 대해 알아야한다는 것을 알았습니다. 인터넷 기반 예제를 사용하여 sqlite3을 배울 수 있지만 현재 데이터베이스 모델을 배우는 데 문제가 있습니다. 문제가 생겼다면 내 마음에 들었습니까?
Aseem Bansal

2

항상 데이터베이스 사용 여부는 수행해야 할 작업에 따라 다릅니다. 많은 양의 데이터가 있고 다른 쿼리를 수행해야하는 경우 데이터베이스가 도움이 될 수 있습니다.

귀하의 경우 성능이 허용 될 때까지 스토리지를 테스트 파일에 보관합니다. 일반적으로 텍스트 파일을 읽는 데는 시간이 오래 걸리지 않습니다. 더 필요한 경우 나중에 언제든지 데이터베이스를 추가 할 수 있습니다.

당신이 데이터베이스에 새로운 완전히 경우 내 경험을 들어, CouchDB를 같은 것을 사용하여 쉽게 찾을 수 있습니다 : http://couchdb.apache.org/ 더-SQL 없다 당신은 쿼리 등, 직접 자바 스크립트 나 파이썬을 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.