2011-03-24 3 views
2

mysql 또는 python 스크립트와 관련된 I/O를 줄이는 방법이 있습니까? 나는 EC2를 사용할 생각이고 비용은 괜찮은 것 같습니다. 사실 I/O 사용량을 예측할 수 없으며 비용으로 눈이 멀어 질까 걱정됩니다.응용 프로그램 및 데이터베이스에서 I/O 감소

기본적으로 python 스크립트를 개발하여 데이터를 구문 분석하고 mysql에 업로드합니다. 일단 MySQL에서, 나는 그것에 대해 꽤 무거운 분석을 수행한다. (새로운 컬럼, 테이블을 생성한다. 큰 데이터 세트에 기초한 수학 및 재무 기반 분석을 많이한다.) 무거운 I/O를 피하기위한 설계 모범 사례가 있습니까? memcached는 메모리에있는 모든 것을 저장하고 거기에서 액세스한다고 생각합니다. mysql 또는 다른 스크립트에서 동일한 작업을 수행 할 수있는 방법이 있습니까?

저는 2 기가의 RAM이있는 다른 호스트에서 스크립트를 지금 실행하고 있습니다.하지만 제가보고 있던 ec2 인스턴스는 약 8 기가를 가지고 있으므로 여분의 메모리를 사용하여 돈을 절약 할 수 있는지 궁금합니다.

+0

* 대용량 데이터 *가 얼마나 큽니까?, 메모리에 맞 춥니 까? –

+0

안녕하세요 크리스. 나는 그것이 맞아야한다고 언급 했어야했다. 내 계획은 내 데이터 집합이 아마 상자에서 실행중인 다른 아무것도하지 않고 2 ~ 3 기가 될 것입니다. 작동하는 해결책이 있다면, 나는 정말로 내 기억을 계속 업그레이드 할 수 있습니다. – Lostsoul

답변

0

IO는 디스크 입출력을 의미한다고 가정하고 모든 것을 메모리에 맞출 수 있다고 가정합니다. . 당신은 할 수 :

  • 를 사용하여 MySQL의 MEMORY 테이블 당신은 SQL 쿼리의 편의를 위해 데이터베이스를 사용하는 경우 메모리 저장소에 Sqlite3을 사용하는 것이 아마도 처리 (또는 동안 † 당신의 상자
  • 안 스왑)

또한 EBS을 사용하지 않는 한 Amazon이 귀하의 인스턴스에서 IO를 청구하지 않았다고 생각합니다. EBS는 인스턴스 저장소보다 훨씬 느리 므로 은 지속성 즉,이 필요할 때만 사용하십시오. 데이터를 정리하는 동안은 그렇지 않습니다.

† 아마도 좋지 않은 아이디어

+0

나는 스왑을 비활성화하면 디스크 입출력이 줄어들 것이라고 의심 스럽지만 ... OS에 따라 다를 수 있지만 ... OS에 의존하지 않는 것은 스왑을 사용하지 않으면 실행시 응용 프로그램이 충돌 할 수 있다는 것입니다. out memory ... IMHO 좋은 생각이 아니다 ... 만약 당신의 시스템이 많은 스왑 공간을 사용한다면, 더 많은 메모리를 추가하라. 또는 더 빨리 (SSD) 스왑을 추가하십시오 ... 그러나 그것을 사용 중지하지 마십시오, 이유가 있습니다 .-) – Carpetsmoker

+0

당신이 잘못 생각하는 것은 아닙니다!, 나는 최대 효과를 얻기 위해 가고있었습니다. 충분 이상이어야한다. –

0

쓰기 또는 읽기 여부는 실제로 지정하지 않았습니다. 내 생각에 당신은 램 디스크 (Linux의 경우 tmpfs)의 mysql 인스턴스에서이 모든 작업을 수행 할 수있다.

많은 데이터를 이동하기 때문에 ALTER TABLE 및 큰 데이터를 복사하는 등의 작업으로 인해 많은 IO 요청이 생성됩니다. 이것은 무작위 (또는 예측 가능한 쿼리)가 많은 경우와 동일하지 않습니다.

일괄 작업 인 경우 tmpfs 인스턴스에서 전체 작업을 수행 할 수 있습니다.

머신에서 하나 이상의 mysql 인스턴스를 실행할 수 있습니다. tmpfs에서 인스턴스를 시작하는 것은 매우 쉽습니다. tmpfs에서 datadir과 함께 mysql_install_db를 사용한 다음 적절한 params로 mysqld를 실행하십시오. 어떤 쉘 스크립트에서는 그것을 고수하십시오. 그러면 시작될 것입니다. 램프 (ramfs)에 있기 때문에 버퍼에 많은 메모리를 사용할 필요가 없습니다. 단지 꽤 작게 설정하십시오.

관련 문제