我知道sqlite对于非常大的数据库文件表现不佳,即使它们受支持(曾经在sqlite网站上发表评论,说明如果你需要的文件大小超过1GB,你可能要考虑使用企业rdbms.再找不到它,可能与旧版本的sqlite有关.
但是,出于我的目的,我想在考虑其他解决方案之前了解它到底有多糟糕.
我说的是数千兆字节的sqlite数据文件,从2GB开始.有人对此有经验吗?任何提示/想法?
给定2个函数,哪个应该更快,如果有任何差异?假设输入数据非常大
void iterate1(const char* pIn, int Size)
{
for ( int offset = 0; offset < Size; ++offset )
{
doSomething( pIn[offset] );
}
}
Run Code Online (Sandbox Code Playgroud)
VS
void iterate2(const char* pIn, int Size)
{
const char* pEnd = pIn+Size;
while(pIn != pEnd)
{
doSomething( *pIn++ );
}
}
Run Code Online (Sandbox Code Playgroud)
两种方法都有其他问题需要考虑吗?
我在C++中编写一个并发的持久性消息队列,它需要对文件进行并发读访问,而不使用内存映射io.简短的故事是,几个线程需要从文件的不同偏移量中读取.
最初我有一个具有典型读/写方法的文件对象,并且线程将获取一个互斥锁来调用这些方法.但是,碰巧我没有在某处正确获取互斥锁,导致一个线程在读/写期间移动文件偏移量,另一个线程将开始读/写文件的不正确部分.
所以,偏执的解决方案是每个线程有一个打开的文件句柄.现在我对同一个文件有很多文件句柄,我假设它不是很好.
我想使用类似pread的东西,它允许将当前偏移量传递给读/写函数.
但是,该功能仅适用于linux,我需要在windows,aix,solaris和hpux上进行等效实现,有什么建议吗?
我在一家在VC6上进行C++开发的公司工作,我们正考虑转向VS 2008.
升级有什么好处?
有什么缺点?
有关迁移项目文件的任何指南/步骤,或者我应该注意的问题?人们可以转向不同的开发界面吗?