2010-04-12 2 views
1

내가 쓰고있는 프로그램의 아키텍처에 대한 동료와 토론을했고 좀 더 의견이 필요합니다.이유 및 데이터베이스 반대

상황 :

  • 프로그램이 거의 실시간 (+/- 1 분)으로 업데이트해야합니다.
  • 좌표계에서 오브젝트의 이동이 관련됩니다.
  • 정기적으로 발생하는 이벤트가 있습니다 (예 : 개체 생성).
  • 사용자 입력을 통해 언제든지 동작을 변경할 수 있습니다.

내 솔루션이었다

  • 이 지속적으로 실행하고 내부적으로 데이터를 저장하는 서버를 구축 할 수 있습니다.
  • 서버는 전원 오류 및/또는 충돌로부터 시스템을 보호하기 위해 규칙적인 간격으로 프로그램 상태를 덤프합니다.

그는 프로그램에 데이터베이스가 필요하며 데이터를 업데이트하려면 cronjobs를 사용해야한다고 주장했습니다. 시작점, 끝점 및 속도를 저장하여 운동 정보를 저장하고 방향 및 속도를 계산하여 cronjob에서 위치를 업데이트 (및 다른 개체와의 충돌을 계산) 할 수 있습니다.

그 이유 :이 지속적으로 실행되기 때문에

  • 는 더 많은 CPU & 메모리가 필요합니다.
  • Powerfailures/Crashes가 데이터를 파괴 할 수 있습니다.
  • 데이터베이스가 빠릅니다. 이에 대한

내 이유가 대부분입니다

  • 뿐만 아니라 전체 분에 발생할 수있는 이벤트와 같은 매우 정확한 (하지만 그 나쁘지 않을 것이다).
  • 관계형 데이터에서 개체로 실행할 때마다 데이터 변환이 필요할 수 있습니다 (값 비싼 경우가 있음).
  • RDBMS는 특수한 문제에 대한 일반적인 솔루션이므로 전문적인 솔루션이 더 효율적이어야합니다.
  • Powerfailures (또는 다른 충돌)는 부분적으로 업데이트 된 데이터만으로 정의되지 않은 상태로 데이터를 남겨 둘 수 있습니다 (비용이 많이 드는)주의 (트랜잭션과 같은)가 발생하지 않는 한.

귀하의 의견은 무엇입니까?
어떤면에 추가 할 수있는 인수는 무엇입니까?

+0

그는 "시작점, 끝점 및 속도 저장하기"라고 주장했습니다. 그러면 클라이언트가 위치를 계산할 수 있습니다. 이렇게하면 서버가 한 가지에 집중할 수 있습니다. 이는 효율적인 방식으로 데이터를 저장하는 것입니다. 이것은 데이터베이스를 사용하여 가장 잘 수행 될 수 있습니다. 그렇지 않으면 데이터베이스에 익숙하다고 가정 할 때 생산성이 떨어지는 직접 프로그래밍해야합니다. "Cronjobs"는 불필요한 데이터를 제거하는 데 종종 사용되며 cronjobs가 불필요한 데이터를 데이터베이스에서 제거하는 것이 합리적이라고 생각합니다. 쿼리 기반 데이터베이스를 사용하면 불필요한 데이터도 모두 필터링 할 수 있습니다. – Pindatjuh

답변

1

여기에서 설명한 내용을 통해 귀하의 솔루션이 더 나은 옵션 인 것 같습니다. 1 분에 1 번 실행되지만 실행하려면 얼마나 걸리나요? 단 몇 초 만에 관계형 데이터로의 변환은 다른 오버 헤드와 마찬가지로 중요하지 않을 수 있습니다. 대부분이 30 초 정도 걸립니다. 이것은 프로그램이 아주 작다고 가정합니다.

그러나 크기가 더 크고 더 커질 것이라고 가정하면 스트레이트 덤프를 수행하는 것이 더 좋습니다. 매 실행마다 전체 덤프를하고 싶지는 않을 수도 있지만, 그것은 당신에게 달려 있습니다. 많은 공간을 차지할 수도 있다는 것을 기억하십시오 (데이터베이스를 사용하는 경우에도 마찬가지입니다).

상태를 덤프하려면 준 트랜잭션과 함께 일종의 중복 시스템이 있어야합니다. 최신 버전에 문제가 생길 수 있으므로 여러 복사본을 저장해야합니다. 예를 들어, 저장하는 동안 전원이 꺼지고이 절반 이상 작성된 백업이 없습니다. 거래가 이루어지면 파일이 완전히 작성되었다는 것을 알리기 위해 뭔가가 필요하므로 무언가 잘못되면 항상 가장 최근에 성공한 저장이 무엇인지 알 수 있습니다.

오, 그리고 그의 논쟁이 끊임없이 계속되고있다 : 만약 당신이 그것을 cronjob이나 심지어 self-enclosed sleep statement 또는 이와 유사한 것으로 설정했다면, CPU가 실행되지 않을 때 CPU 시간을 사용하지 않는다. RDBMS를 사용하는 경우의 양입니다.

디스크에 곧바로 작성하는 경우 데이터베이스에 대해 더 빠른 방법이며 빠른 검색이 가능합니다. 지적했듯이 오버 헤드가 없기 때문입니다.

요약 : 많은 프로세서 시간이나 기록 레코드가 유휴 상태 인 경우 데이터베이스가 좋은 생각이지만 자원이 합법적 인 관심사라면 너무 많은 오버 헤드가 발생할 수 있으므로 예방 조치가 취해진 덤프가 더 좋습니다.

2

데이터베이스가 빠르지 않습니다. 어리석은 ... 맞춤 데이터베이스 구조를 작성하고 메모리에 저장하는 것보다 데이터베이스가 더 빨리 어떻게 될 수 있습니까 ?? 데이터베이스는 데이터를 디스크에 저장하는 일반화 된 도구이므로 사용자가 직접 코드를 작성할 필요가 없습니다. 개발자는 수많은 이질적인 (때로는 일관성이없는) 비즈니스 기능 (지속성 (내구성), 트랜잭션 무결성, 캐싱, 관계형 무결성, 원 자성 등)의 요구를 해결해야하고 응용 프로그램 개발자를 정의에 따르면 너무 많이 걱정할 필요가 있습니다.그렇다고해서 그의 결론이 잘못되었음을 의미하는 것은 아닙니다.

다른 이의 제기는 직접 문제를 해결할 수있는 코드를 작성하여 해결할 수 있습니다 ...하지만 어디로 가는지 볼 수 있습니다 ... 어느 시점에서 문제 해결을위한 사용자 지정 코드를 작성하는 개발 노력 당신의 어플리케이션에 중요한 것은 데이터베이스를 사용했을 때의 성능에 비해 중요합니다 - 이미 모든 것을 처리합니다 ...이 중 몇 가지는 중요합니까? 그리고 그 문제를 해결하는 데 필요한 코드를 작성하는 방법을 알고 있습니까?

+1

왜 데이터베이스가 필요합니까? 실시간 데이터는 저장할 필요가 없습니다. 그것은 단지 1 초 후에 쓸모가 없다. –