몇 가지 중요한 추가 사항(및 개선 제안 사항:))이 있습니다.
1. 작성자는 sqlite_open() 함수를 사용하지만 - 데이터베이스 파일에 대한 액세스 구분 제어 - 임시 인 메모리 데이터베이스 생성 - 로컬 파일 시스템뿐만 아니라 URI로 데이터베이스 작업 등을 의미하는 개방 플래그와 함께 작동 할 수있는보다 유연한 함수 sqlite_open_v2()가 있습니다.
#define SQLITE_OPEN_READONLY 0x00000001 /* sqlite3_open_v2()에 대해 확인 */ #define SQLITE_OPEN_READWRITE 0x00000002 /* sqlite3_open_v2()에 대해 확인 */ #define SQLITE_OPEN_CREATE 0x00000004 /* sqlite3_open_v2()에 대해 확인 */ #define SQLITE_OPEN_DELETEONCLOSE 0x00000008 /* VFS 전용 */ #define SQLITE_OPEN_EXCLUSIVE 0x00000010 /* VFS 전용 */ #define SQLITE_OPEN_AUTOPROXY 0x00000020 /* VFS 전용 */ #define SQLITE_OPEN_URI 0x00000040 /* sqlite3_open_v2()에 대해 확인 */ #define SQLITE_OPEN_MEMORY 0x00000080 /* sqlite3_open_v2()에 대해 확인 */ #define SQLITE_OPEN_MAIN_DB 0x00000100 /* VFS 전용 */ #define SQLITE_OPEN_TEMP_DB 0x00000200 /* VFS 전용 */ #define SQLITE_OPEN_TRANSIENT_DB 0x00000400 /* VFS 전용 */ #define SQLITE_OPEN_MAIN_JOURNAL 0x00000800 /* VFS 전용 */ #define SQLITE_OPEN_TEMP_JOURNAL 0x00001000 /* VFS 전용 */ #define SQLITE_OPEN_SUBJOURNAL 0x00002000 /* VFS 전용 */ #define SQLITE_OPEN_MASTER_JOURNAL 0x00004000 /* VFS 전용 */ #define SQLITE_OPEN_NOMUTEX 0x00008000 /* sqlite3_open_v2()에 대해 확인 */ #define SQLITE_OPEN_FULLMUTEX 0x00010000 /* sqlite3_open_v2()에 대해 확인 */ #define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* sqlite3_open_v2()에 대해 확인 */ #define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* sqlite3_open_v2()에 대해 확인 */ #define SQLITE_OPEN_WAL 0x00080000 /* VFS 전용 */
2. 계산에 "무거운" 지표를 사용할 때 EA 최적화를 가속화하는 문제를 해결하기 위해 sqlite를 사용해 왔습니다. 이러한 상황에서 논리적 인 해결책은 첫 번째 실행 중에 최적화 기간 동안의 지표 판독 값을 데이터베이스에 저장하고 후속 실행 중에 이미 계산 된 판독 값을 데이터베이스에서 직접 추출하는 것입니다. 따라서 "기본 형태"로 sqlite 엔진을 사용하면 많은 INSERT 및 SELECT 쿼리를 전송하는 프로세스에 많은 시간이 걸리기 시작합니다. 실제로는 1) 나중에 데이터를 남겨두고 싶을 때 항상 좋은 것은 아닌 인메모리 데이터베이스와 2) SQL 엔진의 #pragma-지시어를 사용하는 방법이 있다는 것을 알았습니다.
두 번째 옵션은 데이터베이스를 RAM에서 디스크로 덤프할 필요가 없으므로 더 바람직합니다. 다음과 같은 방식으로 수행됩니다. 데이터베이스에 첫 번째 테이블을 만들기 전에 다음 쿼리를 보내야합니다:
"PRAGMA temp_store = MEMORY;" "PRAGMA page_size = 65536;" "PRAGMA cache_size = 16384;" "PRAGMA journal_mode = OFF;" "PRAGMA locking_mode = EXCLUSIVE;" "PRAGMA synchronous = OFF;"
음, 그 후에는
"CREATE TABLE IF NOT EXISTS"
등
모두에게 행운을 빕니다!
몇 가지 중요한 추가 사항(및 개선 제안:))이 있습니다.
1. 작성자는 sqlite_open() 함수를 사용하지만, - 데이터베이스 파일에 대한 액세스 구분 제어, - 임시 인메모리 데이터베이스 생성, - 로컬 파일 시스템뿐만 아니라 URI로 데이터베이스 작업 등을 수행할 수 있는 보다 유연한 sqlite_open_v2() 함수가 있습니다.
2. 계산에 "무거운" 지표를 사용할 때 EA 최적화를 가속화하는 문제를 해결하기 위해 sqlite를 사용해 왔습니다. 이러한 상황에서 논리적 인 해결책은 첫 번째 실행 중에 최적화 기간 동안의 지표 판독 값을 데이터베이스에 저장하고 후속 실행 중에 이미 계산 된 판독 값을 데이터베이스에서 직접 추출하는 것입니다. 따라서 "기본 형태"로 sqlite 엔진을 사용하면 많은 INSERT 및 SELECT 쿼리를 전송하는 프로세스에 많은 시간이 걸리기 시작합니다. 실제로는 1) 나중에 데이터를 남겨두고 싶을 때 항상 좋은 것은 아닌 인메모리 데이터베이스와 2) SQL 엔진의 #pragma-지시어를 사용하는 것이 탈출구라는 것을 알았습니다.
두 번째 옵션은 데이터베이스를 RAM에서 디스크로 덤프할 필요가 없으므로 더 바람직합니다. 다음과 같은 방법으로 수행됩니다. 데이터베이스에 첫 번째 테이블을 만들기 전에 다음 쿼리를 보내야 합니다:
음, 그 후에는 다음을 수행 할 수 있습니다.
등
모두에게 행운을 빕니다!
테스터를 실행할 때 표시기 판독 데이터는 본질적으로 단순한 배열, 순차적 액세스가 가능한 스트림이므로 SQL베이스에 저장하고 읽는 것은 중복되고 합리적이지 않습니다.
이 글의 저자가 SQLite 적용의 예로 제안한 거래 작업 목록에 대해서도 마찬가지입니다.
따라서 관계형 다중 링크 데이터 모델 사용의 효율성은 주로 해결되는 작업에 따라 달라지며, 이 예제에서 IMHO는 "귀로만 당겨지는" 것일 수 있다는 점을 인식해야 합니다.
.
테스터 실행 중 표시기 판독값 데이터는 본질적으로 직렬 액세스가 가능한 스트림인 단순한 배열이므로 SQL 데이터베이스에 저장하고 읽는 것은 중복되고 합리적이지 않습니다.
중복되고 합리적이지 않더라도 다시 읽어보세요: Expert Advisor를 최적화하기 위해 다음과 같이 하세요.
사용할 수 있고 좋습니다. 또 다른 한 가지는 SQLite를 심각한 프로젝트에 사용해서는 안된다는 것입니다. 어쨌든 나는 그것을 추천하지 않을 것입니다. 나 자신도 두 번 이상 충돌 문제에 직면했습니다. 예를 들어, 거래 로봇이 다른 차트에 연결되어 있지만 동일한베이스를 사용하고 액세스가 하나의 범용 테이블 (예 : 등록 / 변경 세션, 계정)에 액세스하는 경우 어떤 경우에도 "테이블 잠김"과 같은 오류가 발생합니다. 그리고 모든 트랜잭션이 완료되고 커서가 닫히고 데이터베이스가 공유 모드에서 열렸어도 상관없습니다. 이 문제는 SQLite 개발자에게도 알려져 있습니다.
제 생각에는 MS Access는 SQL을 지원하는 파일 데이터베이스 중 최고입니다. 아무리 소심한 사람들을 꾸짖어도 저는 MS Access를 위해 SQLite를 떠났고 전혀 후회하지 않습니다. OleDB 드라이버 Jet 4.0은 Win98에서도 설치되므로 모든 OC 윈도우에서 프로젝트가 작동합니다.
스크립트가 작동하지 않고 즉시 작동하지 않습니다.
해야 할 일과 방법을 모르는 경우 매뉴얼을 참고하세요.
새로운 기고글 SQL 및 MQL5: SQLite 데이터베이스로 작업하기 가 게재되었습니다:
이 문서는 프로젝트에서 SQL을 사용하는 데 관심이 있는 개발자를 대상으로 합니다. SQLite의 기능과 장점을 설명합니다. 이 문서에서는 SQLite 기능에 대한 특별한 지식이 필요하지 않지만 SQL에 대한 최소한의 이해만으로도 유용합니다.
많은 개발자들이 데이터 스토리지 목적으로 프로젝트에 데이터베이스를 사용하는 것을 고려하지만 SQL 서버 설치에 소요되는 추가 시간이 얼마나 되는지 알고도 이에 대해 주저하고 있습니다. 또한 프로그래머에게는 그다지 어렵지 않을 수 있지만(데이터베이스 관리 시스템(DBMS)가 이미 다른 용도로 설치되었다면) 결국 소프트웨어를 함께 설치하는 것을 꺼릴 수 있는 일반 사용자에게는 분명 문제가 될 것입니다.
따라서 많은 개발자들은 현재 작업 중인 솔루션이 극소수만 사용할 것이라는 사실을 깨닫고 DBMS를 다루지 않기로 합니다. 그 결과, 파일 작업(사용되는 데이터의 다양성에 따라 둘 이상의 파일을 처리해야 하는 경우가 종종 있음)으로 전환됩니다. CSV, XML 또는 JSON, 구조 크기가 엄격한 이진 데이터 파일 등이 있습니다.
하지만 SQL 서버에는 훌륭한 대안이 있습니다! 또한 프로젝트의 모든 작업이 로컬에서 수행되므로 추가 소프트웨어를 설치할 필요가 없습니다. SQL의 모든 기능을 사용할 수 있습니다. 우리는 SQLite에 대해 이야기하고 있습니다.
이 문서의 목적은 SQLite를 신속하게 시작하기 위한 것입니다. 따라서 하위 계층과 상상할 수 있는 모든 매개 변수 집합 및 함수 플래그에 대해 설명하지 않고 SQL 명령을 실행하기 위한 가벼운 연결 래퍼를 만들고 그 사용을 시연할 것입니다.
기사를 진행하려면 다음을 수행해야 합니다:
작성자: ---