有几个重要的补充(和改进建议:): 1.)
1.作者使用了 sqlite_open()函数,但还有一个更灵活的函数 sqlite_open_v2(),它可以使用打开标志,这意味着:- 控制数据库文件的访问分界;- 创建临时内存数据库;- 通过 URI 使用数据库,而不仅仅是本地文件系统,等等。
#define SQLITE_OPEN_READONLY 0x00000001 /* OK for sqlite3_open_v2() */ #define SQLITE_OPEN_READWRITE 0x00000002 /* OK for sqlite3_open_v2() */ #define SQLITE_OPEN_CREATE 0x00000004 /* OK for 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 /* OK for sqlite3_open_v2() */ #define SQLITE_OPEN_MEMORY 0x00000080 /* OK for 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 /* OK for sqlite3_open_v2() */ #define SQLITE_OPEN_FULLMUTEX 0x00010000 /* OK for sqlite3_open_v2() */ #define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* OK for sqlite3_open_v2() */ #define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* OK for sqlite3_open_v2() */ #define SQLITE_OPEN_WAL 0x00080000 /* 仅适用于 VFS */
2.我一直在使用 sqlite 来解决在使用计算量 "很大 "的指标时加速EA 优化的 问题。在这种情况下,合理的解决方案是在第一次运行时将优化期间的指标读数保存在数据库中,并在后续运行时直接从数据库中提取已经计算过的读数。因此,如果以 "默认形式 "使用 sqlite 引擎,发送大量 INSERT 和 SELECT 查询会耗费大量时间。在实践中,我们发现出路在于:1)使用内存数据库,但如果我们想将数据留待以后使用,这并不总是好办法;2)使用 SQL 引擎的 #pragma-directives。
第二种方法更可取,因为它无需将数据库从 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"等等。
祝大家好运!
有几项重要的补充(以及改进建议:))
作者使用了 sqlite_open()函数,但还有一个更灵活的 sqlite_open_v2()函数,可以使用打开标志,这意味着:- 控制数据库文件的访问分界;- 创建临时内存数据库;- 通过 URI 使用数据库,而不仅仅是在本地文件系统中,等等。
2.我一直在使用 sqlite 来解决在使用计算量 "很大 "的指标时加速EA 优化的 问题。在这种情况下,合理的解决方案是在第一次运行时将优化期间的指标读数保存在数据库中,并在后续运行时直接从数据库中提取已经计算过的读数。因此,如果以 "默认形式 "使用 sqlite 引擎,发送大量 INSERT 和 SELECT 查询会耗费大量时间。实际上,我们发现出路在于:1)使用内存数据库,但如果我们想将数据留待以后使用,这并不总是好办法;2)使用 SQL 引擎的 #pragma 指令。
第二种方法更可取,因为它无需将数据库从 RAM 转储到磁盘。具体方法如下:在数据库中创建第一个表之前,应向其发送以下查询:
好了,之后就可以
等等。
祝大家好运!
运行测试器时读取的指标数据本质上是一个简单数组,是一个顺序访问的流,因此在 SQL 基础上保存和读取是多余的,也是不合理的。
文章作者以 SQLite 应用为例提出的交易操作列表也是如此。
因此,我们必须认识到,使用关系型多链路数据模型的效率主要取决于所要解决的任务,而在这些示例中,IMHO 可能只是 "揠苗助长"。
。
使用 SQLite 是可行的,而且效果很好。另外,SQLite 不适用于严肃的项目。无论如何,我都不推荐使用它。我自己就不止一次遇到过它的碰撞问题。例如,如果一个交易机器人连接到不同的图表,但使用的是同一个基础,而地址指向一个通用表(例如注册/更改会话、账户),那么在任何情况下都会出现类似 "表已锁定 "的错误。即使所有事务都已完成,游标都已关闭,数据库也是在共享模式下打开的,也无济于事。SQLite 开发人员也知道这个问题。
在我看来,MS Access 是支持 SQL 的最好的文件数据库。不管你如何责骂小软件公司的人,但我离开 SQLite 转而使用 MS Access,我一点也不后悔。即使在 Win98 中也安装了 OleDB 驱动程序 Jet 4.0,因此项目可以在所有 OC Windows 上运行。
该脚本不工作,开箱即用。
如果不明白要做什么和怎么做,请阅读手册。
新文章 SQL 与 MQL5: 与 SQLite 数据库集成已发布:
本文的目的,是那些打算在他们的项目中使用 SQL 的开发者。它解释了 SQLite 的功能和优势。本文不需要特别的 SQLite 函数知识, 当然对 SQL 的最小理解将是有益的。
许多开发者考虑在他们的项目中使用数据库,目的是进行数据存储,但他们还在对此犹豫,知道安装 SQL 服务器需要多少额外时间。然而对程序员来讲这不是很难 (如果数据库管理系统 (DBMS) 已经因其它目的而安装), 它对一般用户确实是个问题,以至最终对此安装灰心。
许多开发者认识到这样做会导致他们的工作仅有少数人使用,所以他们选择不处理 DBMS。结果, 他们转而使用文件 (经常会处理多于一个文件, 使用多种数据变种): CSV, 较少的 XML 或 JSON, 或限定结构的尺寸的二进制文件, 等等。
然而,事实证明,有一个极好的 SQL 服务器替代者!而你甚至不需要安装额外的软件,因为您的项目一切都在本地完成,同时还允许您使用 SQL 的强大功能。我们来讨论 SQLite。
本文目的是令您快速开始应用 SQLite。因此我不再罗嗦参数集和函数标志等细微之处,而是创建一个轻量连接包装来执行 SQL 命令,并演示它的使用。
继续阅读本文,您需要:
作者:o_O