(MySQL) DB를 가지고 있다고 가정 해 봅시다. 내가 응용 프로그램을 통해이 데이터베이스의 업데이트를 자동화하려는 그 의지 :DB 테이블의 메모리 내 표현을위한 컨테이너
1. Import from DB
2. Calculate updated data
3. Export back updated data
타이밍이 중요하다, 나는, 동안 계산을 가져 오지 않는 사실 그때 어떤 쿼리를 원하지 않는다 ; 나는 전체 테이블 (들)을 가져오고 싶습니다 다음 계산합니다. 그래서, 내 질문은, 행이 클래스의 인스턴스로 표현된다면, 나는이 컨테이너를 어떤 컨테이너에 집어 넣을 까?
벡터? 세트? 주문한 대 주문하지 않은 것은 어떻습니까? 큰 O 시간에 따라 제 경우에 가장 적합한 것을 사용하십시오. 특별한 함정이 여기에 떨어질까요? 이 경우는 "메모리에서 태어난"데이터와 다르지 않으므로 크기 오버 헤드 외에도 고려해야 할 사항은 "검색 또는 삽입이 더 빠르지 않습니까?"입니다.
아마 가장 좋은 방법은 일부 ORM을 사용하는 것입니다.하지만 원하지 않는다고합시다. 그것의 사용을위한 특별한 이유가있는 경우
나는 커넥터 (
libmysqlcpp
)와 같은 JDBC와 같은 인터페이스를 사용하여 ..., 나는 몇 가지 애플 리케이션을
boost::unordered_set
를 사용 보았다, 나는 생각해.
계산이 상당히 복잡한 경우 어떻게해야합니까? 수백 MB의 직렬화 된 입력 파일이 사용되고 구문 분석이 끝나면 지금까지 (DB에서 가져온) 데이터와 새 데이터 (입력 파일에서 가져온 데이터)를 사용하여 계산이 수행됩니다. 그런 다음 계산 결과를 사용하여 DB를 업데이트해야합니다 (어쩌면 여러 테이블에서). 나는 데이터베이스에 대해 많이 알지 못하기 때문에 cpp에서 이것을하고 싶다. DB에서 사용자 정의 함수가 이것을하기위한 것인지 확실하지 않다. – Innkeeper
DB는 ~ 25 테이블, 최대 ~ 10M 항목으로 추정됩니다. 입력 파일의 최대 크기는 ~ 1GB이며, cpp의 처리 시간은 ~ 2-3 시간입니다. 가져 오기/내보내기 시간은 유사한 테이블 크기로 테스트되며,이 경우 허용되는 20-30 분을 넘지 않습니다. (참고 : 이것은 추정치이며 코드는 아직 작성되지 않았습니다. 이것은 설계 단계입니다.) – Innkeeper
아마도 제안 된 디자인을 사용해야 할 실제 이유가 있습니다. 나는 너의 문제의 단지 작은 부분을보고있다. :) 당신이 지금 말하고있는 바로는 파일로부터 데이터를 처리하여 DB에 주입하고 DB에 "조정"합니다.사용자 정의 proc는 C++로 할 수 있으며 C++로 할 수있는 것이 더 있습니다. 이러한 설계로 인해 발생할 수있는 유일한 걱정은 사용자가 여전히 쿼리를 수행하는 경우 DB 상자의 CPU를 너무 많이로드하는 것입니다. – Johan