我需要一个非常快速的SQLite数据库访问.以这种方式设置参数:
PRAGMA synchronize = OFF
PRAGMA jorunal_mode = MEMORY
Run Code Online (Sandbox Code Playgroud)
使速度足以满足我的项目需求.这些设置使SQLite与操作系统手中的数据库文件保持同步.但是有一些情况,某些插入,之后我必须确保数据写入磁盘.
有什么方法可以强制SQLite将所有数据(在内存日志中等待)写入磁盘?
谢谢.
我有一个后端设备,MQTT客户端连接到开源MQTT代理(Mosquitto).另一方面,我有许多前端设备(PC,平板电脑,移动),GUI应用程序也连接到代理.所以这里Mosquitto作为后端设备和前端设备之间的通信点,只是在它们之间转发消息.有时传输的数据量可能非常高(例如1 MB/min).
一个后端设备+许多前端设备是一个安装.我需要为数千个此类安装同时工作的基础设施做好准备.所以我的服务需要非常可靠.我的公司使用Azure云解决方案,所以我开始学习这个解决方案,我必须承认我有点困惑.我已经读过我需要使用IoT Hub,但它需要MQTT网关才能与MQTT设备对话.另一方面,如果我理解得很好,网关需要在某个VM上运行,所以这里我失去了我的解决方案的可扩展性.我对吗?现在,如果我需要支持100k或500k设备,那么我将需要另一台VM?还有一件事是我需要将所有这些与一些web服务集成(用于管理后端和前端设备),所以我需要webservice和MQTT代理之间的一些连接......
在我开始使用Azure之前,我想,我将简单地启动一个MQTT代理服务,并且神奇地它将是高度可扩展的,并且能够为数千个设备提供服务.
谁能解释我怎么咬这个?
我有升级库的问题.我正在使用MinGW和gcc 4.5.2来编译以下代码:
unsigned long GetEpochSeconds()
{
using namespace boost::posix_time;
using namespace boost::gregorian;
ptime now(second_clock::universal_time());
ptime epoch(date(1970,1,1));
time_duration diff = now-epoch;
return diff.total_seconds();
}
Run Code Online (Sandbox Code Playgroud)
问题是这段代码不是线程安全的.当我从多个线程中运行它时,我的应用程序崩溃了.现在我已经转换为c-standard函数,如time,mktime等,一切正常,但将来我需要一些提升时间函数.
我也用-D_REENTRANT编译,但这没有用.
谢谢你的任何建议.
我有一个问题,添加索引到附加到主数据库的内存数据库.
1)我从文件中打开数据库(F)
2)附加:memory:(M)数据库
3)在数据库M中创建表
4)将数据从F复制到M
我还想在数据库M中创建一个索引,但不知道该怎么做.此代码创建索引,但在F数据库中:
sQuery = "CREATE INDEX IF NOT EXISTS [INDID] ON [PANEL]([ID] ASC);";
Run Code Online (Sandbox Code Playgroud)
我尝试在表名之前添加名称限定符,如下所示:
sQuery = "CREATE INDEX IF NOT EXISTS [INDID] ON [M.PANEL]([ID] ASC);";
Run Code Online (Sandbox Code Playgroud)
但SQLite返回的消息是main.M.PANEL列不存在.
我能做什么?