2013-12-20 3 views
0

(MySQL) DB를 가지고 있다고 가정 해 봅시다. 내가 응용 프로그램을 통해이 데이터베이스의 업데이트를 자동화하려는 그 의지 :DB 테이블의 메모리 내 표현을위한 컨테이너

1. Import from DB 
2. Calculate updated data 
3. Export back updated data 

타이밍이 중요하다, 나는, 동안 계산을 가져 오지 않는 사실 그때 어떤 쿼리를 원하지 않는다 ; 나는 전체 테이블 (들)을 가져오고 싶습니다 다음 계산합니다. 그래서, 내 질문은, 행이 클래스의 인스턴스로 표현된다면, 나는이 컨테이너를 어떤 컨테이너에 집어 넣을 까?

벡터? 세트? 주문한 대 주문하지 않은 것은 어떻습니까? 큰 O 시간에 따라 제 경우에 가장 적합한 것을 사용하십시오. 특별한 함정이 여기에 떨어질까요? 이 경우는 "메모리에서 태어난"데이터와 다르지 않으므로 크기 오버 헤드 외에도 고려해야 할 사항은 "검색 또는 삽입이 더 빠르지 않습니까?"입니다.

아마 가장 좋은 방법은 일부 ORM을 사용하는 것입니다.하지만 원하지 않는다고합시다. 그것의 사용을위한 특별한 이유가있는 경우

나는 커넥터 ( libmysqlcpp)와 같은 JDBC와 같은 인터페이스를 사용하여 ..., 나는 몇 가지 애플 리케이션을 boost::unordered_set를 사용 보았다, 나는 생각해.

답변

1

사용하려는 컨테이너가 너무 적은 정보로 추측 될 수 있다고 생각하지 않습니다. 주로 데이터 크기, 유형 및 실행할 알고리즘에 따라 다릅니다.

그런 디자인에 대한 나의 주된 관심사는 네트워크 나 기반과 데이터베이스를 빨리 막을 것이라는 점입니다. 당신은 당신이거야 큰 테이블이있는 경우 :

  • 모든 당신 기계 부품의 네트워크
  • 과정에 대한 데이터 (? 일부 열) 또는 전체를 검색 테이블에서 모든 데이터를 선택 데이터는
  • 는 네트워크를 통해
  • 갱신하여 행을 데이터를 밀어 (또는 어쩌면 대체/삭제)

왜 당신이 mysq에 직접 작업 고려하지 않는다 난 서버? 직접 데이터를 처리하고 네트워크를 저장하며 mysql이 메모리 내 컨테이너가 처리 할 수없는 엄청난 양의 데이터, 수량을 처리 할 수 ​​있다는 장점을 활용하여 user defined function을 생성합니다.

+0

계산이 상당히 복잡한 경우 어떻게해야합니까? 수백 MB의 직렬화 된 입력 파일이 사용되고 구문 분석이 끝나면 지금까지 (DB에서 가져온) 데이터와 새 데이터 (입력 파일에서 가져온 데이터)를 사용하여 계산이 수행됩니다. 그런 다음 계산 결과를 사용하여 DB를 업데이트해야합니다 (어쩌면 여러 테이블에서). 나는 데이터베이스에 대해 많이 알지 못하기 때문에 cpp에서 이것을하고 싶다. DB에서 사용자 정의 함수가 이것을하기위한 것인지 확실하지 않다. – Innkeeper

+0

DB는 ~ 25 테이블, 최대 ~ 10M 항목으로 추정됩니다. 입력 파일의 최대 크기는 ~ 1GB이며, cpp의 처리 시간은 ~ 2-3 시간입니다. 가져 오기/내보내기 시간은 유사한 테이블 크기로 테스트되며,이 경우 허용되는 20-30 분을 넘지 않습니다. (참고 : 이것은 추정치이며 코드는 아직 작성되지 않았습니다. 이것은 설계 단계입니다.) – Innkeeper

+0

아마도 제안 된 디자인을 사용해야 할 실제 이유가 있습니다. 나는 너의 문제의 단지 작은 부분을보고있다. :) 당신이 지금 말하고있는 바로는 파일로부터 데이터를 처리하여 DB에 주입하고 DB에 "조정"합니다.사용자 정의 proc는 C++로 할 수 있으며 C++로 할 수있는 것이 더 있습니다. 이러한 설계로 인해 발생할 수있는 유일한 걱정은 사용자가 여전히 쿼리를 수행하는 경우 DB 상자의 CPU를 너무 많이로드하는 것입니다. – Johan

관련 문제