2008-10-09 1 views
6

센서 판독 값을 저장할 간단한 SQLite 데이터베이스를 설정하고 있습니다. 응용 프로그램은 약 30 다른 센서로부터 한달에 약 100,000 센서 판독 값을 캡처합니다쿼리가 시간 소모되기 전에 SQLite 테이블에 저장할 수있는 행 수

sensors 
- id (pk) 
- name 
- description 
- units 

sensor_readings 
- id (pk) 
- sensor_id (fk to sensors) 
- value (actual sensor value stored here) 
- time (date/time the sensor sample was taken) 

, 나는 가능한 한 오랫동안 DB에 모든 센서 판독 값을 유지하고 싶습니다 : 표는 다음과 같이 보일 것입니다.

대부분의 쿼리는이 쿼리는 일반적으로 약 100-1000 결과를 반환합니다 형태

SELECT * FROM sensor_readings WHERE sensor_id = x AND time > y AND time < z 

에있을 것입니다.

위의 쿼리를 수행하기 전에 sensor_readings 테이블의 크기가 너무 커지면 (표준 PC에서 몇 초 이상 소요될 수 있음) 문제가됩니다.

각 센서마다 별도의 sensor_readings 테이블을 만드는 것이 좋지만, 불필요한 경우이를 피하고 싶습니다. 이 DB 스키마를 최적화하는 다른 방법이 있습니까?

답변

2

색인을 올바르게 설정하고 있습니까? 그 외에도 http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html을 읽는 것만이 유일한 대답은 '스스로 측정해야 할 것'입니다 - 특히 이것은 하드웨어에 크게 의존 할 것이고 메모리 내 데이터베이스를 사용하는지 또는 디스크를 사용하는지에 달려 있습니다. 삽입물을 거래에 포장할지 여부.

내가 말한 것은 수만 행의 행이 두드러진 후 눈에 띄는 지연이 발생했는데, 이는 완전히 최적화되지 않았 음을 알 수 있습니다. 조금만 읽으면 100 만 개가 넘는 행이있는 사람들이 있다는 인상을받습니다. 적절한 색인 등으로 전혀 문제가없는 사람.

4

쿼리에 time을 사용하려는 경우 인덱스를 추가하는 것이 좋습니다. 그것은 내가 귀하의 정보를 기반으로 제안 할 수있는 유일한 최적화 일 것입니다.

매월 100,000 회의 삽입은 분당 약 2.3입니다. 따라서 다른 색인이 너무 번거롭지 않고 쿼리 속도가 빨라집니다. 나는 그것이 각 센서에 대해 10 만 개가 아닌 30 개 센서 전체에 100,000 건의 삽입이 있다고 가정하고 있지만, 실수라고하더라도 분당 70 건의 삽입은 여전히 ​​괜찮습니다.

성능이 문제가되면 이전 데이터를 이전 테이블 (예 : sensor_readings_old)로 오프로드하고 비 역사적인 테이블 (sensor_readings)에 대한 쿼리 만 수행 할 수 있습니다.

그러면 일반 쿼리에 영향을주지 않고 모든 데이터를 사용할 수 있습니다. 이전 데이터를 실제로 사용하려는 경우 그렇게 할 수는 있지만 쿼리를 수행하는 데 시간이 오래 걸릴 수 있습니다.

1

나는이 늦게 오는거야 알고 있지만, 나는이 나중에이 질문을보고 오는 사람에게 도움이 될 거라고 생각 :만큼

SQLite는 독서에 상대적으로 빠른 경향이있다 한 번에 하나의 응용 프로그램/사용자에게만 서비스를 제공합니다. 동시성과 블로킹은 한 번에 여러 사용자 나 응용 프로그램에 액세스하는 문제가 될 수 있으며 MS SQL Server와 같은 강력한 데이터베이스는 높은 동시성 환경에서 더 잘 작동하는 경향이 있습니다.

다른 사람들이 말했듯이, 읽기 쿼리의 속도가 걱정된다면 분명히 테이블의 색인을 생성 할 것입니다. 당신의 특별한 경우에, 나는 아마도 id와 time을 모두 포함하는 하나의 인덱스를 생성 할 것입니다.

쓰기 속도에주의해야 할 수도 있습니다. 삽입은 빠르지 만 커밋은 느리기 때문에 커밋하기 전에 많은 삽입을 하나의 트랜잭션으로 일괄 처리하는 것이 좋습니다. 이에 대해서는 다음에서 설명합니다. http://www.sqlite.org/faq.html#q19

관련 문제