2009-11-05 4 views
5

우리는 파일로 배열로 저장하거나 웹 기반 프로젝트의 데이터베이스 테이블에 저장할 수있는 정적 데이터를 항상 가지고 있습니다. 그래서 어느 쪽을 선호해야합니까?정적 데이터를 배열이나 데이터베이스에 저장 하시겠습니까?

제 생각에는

, 배열은 몇 가지 장점이 있습니다

  1. 더 유연한 (이것은 정말 복잡한 관계를 지정하는 어떤 구조가 될 수 있습니다)
  2. 더 나은 성능 (그것은하는 것, 메모리에로드됩니다

그러나 동료는 일관된 데이터 지속성 인터페이스를 유지하고 유연성을 높일 수 있기 때문에 DB 접근 방식을 선호한다고 주장했습니다.

그렇다면 어느 것이 좋습니다? 아니면 어떻게 선택할 수 있습니까? 아니면 어떤 시나리오에서는 하나를 선호하고 다른 시나리오에서는 다른 시나리오를 선호해야합니까? 시나리오는 무엇입니까?

편집 :

내가 뭔가를 명확히하겠습니다. Benjamin이 제목을 변경 한 것처럼 배열 (파일)에 저장하려는 데이터는 자주 변경되지 않으므로 코드가 런타임의 배열 값을 변경하지 않습니다. 데이터가 자주 변경되는 경우 의심의 여지없이 DB를 사용합니다. 그래서 내가 그런 게시물을 만들었습니다.

그리고 때로는 같은 몇 가지 정말 복잡한 관계를 저장하는 하드입니다 : (파이썬 딕셔너리 또는 배열로 생각할 수) 바로 위의 코드 샘플과 같은

Task = { 
    "1" : { 
    "name" : "xx", 
    "requirement" : { 
      "level" : 5, 
      "money" : 100, 
    } 
    ... 
} 

을 요구 필드를 저장하기 어렵다 DB (절임 된 객체와 같은 구조를 DB에 직접 저장 하시겠습니까?) 그래서 그러한 조건에서 나는 배열을 선호 할 것입니다.

당신의 아이디어는 무엇입니까? 그런 시나리오에서는 DB에 배열을 선호해야합니다. 맞습니까?

감사합니다.

답변

0

보고있는 데이터의 종류와 정기적으로 업데이트해야하는지 여부에 따라 다릅니다.

데이터가 반복되지 않을지라도 (예 : 행 수) 대부분의 데이터 (구성 데이터가 아닌 데이터)를 데이터베이스에 보관하는 경향이 있습니다. 데이터베이스가 플랫 파일보다 훨씬 쉽게 확장되므로 시스템이 빠르게 커지기 시작하면 플랫 파일이 시스템에 부담이 될 수 있습니다.

0

데이터가 매우 바뀌지 않고 Java로 프로그래밍하는 경우 스프링을 사용하여 값을 보유해야하는 이유는 무엇입니까?

빈에 주입하여 easly 변경할 수 있습니다.

Java에서 개발 중이라면 그게 전부입니다.

+0

죄송합니다. 자바는 사용하지 않습니다. 그리고 우리는 파이썬을 대신 사용합니다. 덕분에 –

3

파일의 "유연한"배열은 DB를 사용하여 이미 많은 문제가 발생했습니다. DB가 실제로 다른 접근법을 사용하는 것보다 느리게 진행될 것이라는 것을 증명할 수 없다면 DB를 사용하십시오. 계속 나아가서 비즈니스 문제를 해결하십시오.OP에서

편집

코멘트 할 수있는 파일을 사용하여 함께 문제, 여기에 소수 (심호흡을하는 일시 정지)이 무엇인지 묻는다.

  • 동시성 : 여러 요청이 다시 파일에 쓰기를 시도 할 수있는 상황을 관리 할 수 ​​있습니다. 너무 어렵지는 않지만 병목 현상이됩니다.
  • 성능 : 예 메모리 내 배열을 수정하는 것이 더 빠르지 만 배열을 파일에 유지해야하는 시간과 양을 결정하는 방법은 무엇입니까? DB를 사용한다고해서 적절한 메모리 내 캐시를 미리 사용할 수는 없습니다. 작은 수정을 할 때마다 파일을 다시 쓰는 것은 그다지 잘 수행하지 못할 것입니다.
  • 확장 성 : 실제로 처음 두 함수입니다. 확장 가능한 목표를 달성하려면 지속되는 작은 데이터 비트를 신속하게 수정할 수 있어야합니다. IWO DB를 사용하지 않으면 결국 DB를 작성하게됩니다. 증가하는 수요를 지원하기 위해 하나 이상의 웹 서버가 필요하다는 것을 알게되면 어디에서 파일을 저장할 것입니까? 이제 네트워크를 통해 파일 I/O를 사용할 수 있습니다 (매우 빠른 것 같습니다).
  • 구조체 : 배열을 사용하는 경우 코드가 데이터 구조를 관리하고 쿼리하는 등의 책임을집니다. DB를 사용하는 것보다 "융통성"이 큰 방법은 무엇입니까? 모든 선택과 복잡성이 여기에 필요합니다.
  • 신뢰성 : 보존 된 데이터의 무결성을 보장해야합니다. 오류가 발생하면 배열/파일 코드에서 데이터가 적어도 그렇게 손상되지 않아야 응용 프로그램을 계속 진행할 수 있습니다.
+0

. 그래서 파일의 문제는 무엇입니까? 예를 들어 줄 수 있습니까? –

+0

이것들이 상수 값이라면 정말 중요합니다. 자주 변경되지 않는 주 (코네티컷, 뉴욕 등)에 대해 이야기하는 경우 메모리 내 솔루션이 더 좋을 수 있습니다. * 정말로 * 상황과 당신이 그것을 어떻게 사용할 지에 달려 있습니다. –

+0

안녕하세요, 안토니. 게시물에 혼란스러워서 죄송합니다. 나는 약간의 설명을했다. 명확한 시나리오에서는 일부 문제가 발생하지 않을 것입니다. 감사합니다. –

2

동료가 맞지만 comp sci 교과서를 옆으로두고 실용적으로해야합니다. 애플리케이션에서 얼마나 자주이 데이터에 액세스합니까? 비교적 자주 발생한다면 액세스 오버 헤드의 비용이 발생하지 않습니다. 플랫 파일에서 읽는 대신 DB의 이점을 얻을 수 있지만 응용 프로그램에서 캐싱 전략을 사용하십시오. 개발 언어에 따라 memcache 또는 jtreecache와 같은 것을 볼 수 있습니다.

+0

감사합니다. 우리는 python/django를 사용하고 있습니다. 서버가 시작된 후 데이터가 정적이됩니다. 즉, 배열을 수동으로 변경할 수는 있지만 너무 자주 발생하지는 않습니다. 그래서 또 다른 질문이 올 수도 있습니다. 새로운 질문을 한 배열을 캐시 할 수 있습니까? http://stackoverflow.com/questions/1680349/do-we-need-cache-for-an-array –

0

그래, 데이터베이스가 과도하게 사용되고 기본 플랫 파일이 여러 시나리오에서 작동 할 수 있다는 암묵적인 평가에 동의합니다. 응용 프로그램이 읽기 전용 인 경우 (그리고 응용 프로그램이 다시 시작될 때 관리자가 작성) 필자는이 파일을 확실히 읽습니다. 응용 프로그램이 파일에 쓰지만 한 스레드에서만 추가 모드 (임의의 삽입/업데이트 대)로 작성하는 경우에도 파일을 사용합니다. 아무것도 다른 -

+0

file to db을 선호하는 것에 대한 논쟁이 있습니까? 나는 분명하지 않기 때문에. –

3

될 수 있습니다 등 임의 업데이트, 쿼리, 동시성 제어와 실제 데이터베이스를 필요 objetive/실용 :

  • 가 런타임에 데이터 쓰기합니까? 예 : Db, No : 파일
  • 주당 한 번 이상 데이터를 업데이트합니까? 예 : Db, No : 파일
  • 업데이트 된 데이터 파일을 릴리스하는 것은 쉽지 않은 일입니까? 예 : Db, 아니오 : 파일,
  • 자주 읽으십니까? 예 : 파일/캐시, 아니요 : Db
  • 데이터 파일을 업데이트하는 데 어려움이 있으며 추가 도구가 필요합니까?예 : db, 아니요 : 파일

다른 점을 잊어 버렸지 만 기본 사항은 있습니다.

관련 문제