2017-11-09 1 views
0

SQL과 함께 작동하는 몇 가지 함수를 작성했습니다. 나는 testthat과 in memory SQLite 데이터베이스를 사용하여 함수를 테스트한다. 그러나 일부 함수는 SQLite does not support the ALTER TABLE command이므로 SQLite를 사용하여 테스트 할 수 없습니다.메모리에 mysql 서버를 시뮬레이트 할 수 있습니까?

SQLite를 시뮬레이션 할 수있는 것과 같은 방식으로 메모리에 mySQL 데이터베이스를 시뮬레이트 할 수있는 방법이 있습니까?

> DBI::dbConnect(RSQLite::SQLite(), ":memory:") 
<SQLiteConnection> 
    Path: :memory: 
    Extensions: TRUE 
> DBI::dbConnect(RMySQL::MySQL(), ":memory:") 
Error in .local(drv, ...) : 
    Failed to connect to database: Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 

그렇지 않은 경우 어떻게 mySQL 기능에 대한 자동 테스트를 작성합니까?

답변

1

전체 MySQL 인스턴스를 SQLite :memory: 옵션과 같이 메모리에서 실행할 수 없습니다. MySQL은 SQLite와 같이 임시 데이터베이스가 아닌 영구 데이터베이스 서버로 설계되었습니다.

CREATE TABLE MyTable (...whatever...) ENGINE=MEMORY; 

RMySQL에서 이에 해당하는이 dbWriteTable() 방법으로 보이지만, 지금까지의 내가 문서에서 말할 수있는, 당신은 지정할 수 없습니다 :

그러나, 개별 테이블의 MySQL의 메모리 스토리지 엔진을 사용할 수 있습니다 이 메소드로 테이블을 생성 할 때 ENGINE. MEMORY 엔진을 사용하려면 MySQL 클라이언트에서 수동으로 테이블을 만들어야한다.

그러나 모든 저장소 엔진에는 약간 다른 동작이 있습니다. InnoDB의 기능에 의존하는 테스트가 있다면, MEMORY 스토리지 엔진 (예 : 로우 레벨 잠금, 외부 키, 전문 검색)으로 시뮬레이션 할 수 없습니다.

는 MEMORY 스토리지 엔진에 설명서를 읽기 : https://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html

P.S가 : NDB 클러스터를 사용하는 매뉴얼 페이지의 제안을 무시합니다. 더 빠를 수도 있지만 성능을 달성하려면 여러 서버와 특별한 데이터베이스 디자인이 필요합니다. 설정하는 것이 훨씬 어렵습니다.

+0

이것은 mySQL이 설치되어있을 때를 대비 한 것으로 보입니다. 질문은 R. – Deleet

+0

@Deleet 내에서 메모리에 mySQL을 갖는 것에 관한 것입니다. 위의 업데이트 된 답변을 참조하십시오. –

관련 문제