相关疑难解决方法(0)

具有非常大的数据库文件的sqlite的性能特征是什么?

我知道sqlite对于非常大的数据库文件表现不佳,即使它们受支持(曾经在sqlite网站上发表评论,说明如果你需要的文件大小超过1GB,你可能要考虑使用企业rdbms.再找不到它,可能与旧版本的sqlite有关.

但是,出于我的目的,我想在考虑其他解决方案之前了解它到底有多糟糕.

我说的是数千兆字节的sqlite数据文件,从2GB开始.有人对此有经验吗?任何提示/想法?

database sqlite performance

317
推荐指数
9
解决办法
16万
查看次数

SQLite可以处理9000万条记录吗?

或者我应该使用不同的锤子来解决这个问题.

我有一个非常简单的用例来存储数据,实际上是一个稀疏矩阵,我试图将其存储在SQLite数据库中.我创建了一个表:

create TABLE data ( id1 INTEGER KEY, timet INTEGER KEY, value REAL )
Run Code Online (Sandbox Code Playgroud)

我插入了大量数据(每10分钟800个元素,每天45次),一年中大部分时间.(id1,timet)的元组将始终是唯一的.

时间值是自纪元以来的秒数,并且将始终增加.出于所有实际目的,id1是随机整数.虽然可能只有20000个独特的ID.

然后我想访问id1 == someid的所有值或访问timet == sometime的所有元素.在我通过Linux上的C接口使用最新SQLite的测试中,查找其中一个(或此查找的任何变体)大约需要30秒,这对我的用例来说还不够快.

我尝试为数据库定义一个索引,但这减慢了插入到完全不可行的速度(虽然我可能做错了...)

上表导致对任何数据的访问速度非常慢.我的问题是:

  • SQLite完全是错误的工具吗?
  • 我可以定义索引以显着加快速度吗?
  • 我应该使用像HDF5而不是SQL这样的东西吗?

请原谅我对SQL的基本理解!

谢谢

我包含一个代码示例,显示使用索引时插入速度如何减慢到爬行速度.使用'create index'语句,代码需要19分钟才能完成.没有它,它会在18秒内运行.


#include <iostream>
#include <sqlite3.h>

void checkdbres( int res, int expected, const std::string msg ) 
{
  if (res != expected) { std::cerr << msg << std::endl; exit(1); } 
}

int main(int argc, char **argv)
{
  const size_t nRecords = 800*45*30;

  sqlite3      *dbhandle = NULL;
  sqlite3_stmt *pStmt = NULL;
  char statement[512]; …
Run Code Online (Sandbox Code Playgroud)

sql sqlite

41
推荐指数
5
解决办法
4万
查看次数

sqlite表中的最大行数

给一个简单的sqlite3 table(create table data (key PRIMARY KEY,value)),密钥大小为256字节,值大小为4096字节,这个sqlite3表中最大行数的限制(忽略磁盘空间限制)是多少?他们的限制是否与操作系统相关(win32,linux或Mac)

database sqlite sizing

24
推荐指数
4
解决办法
6万
查看次数

Sqlite DB与Android有一些基本问题

我想在Android中使用SQLite数据库.我有几个问题:

  1. 数据库的最大大小是多少?
  2. 数据的安全性如何?
  3. 数据库存储在哪里?
  4. 这些数据会在手机上保留多长时间?

sqlite android

8
推荐指数
2
解决办法
410
查看次数

SQLite:实际限制是什么?

在您将此问题标记为重复之前,请听我说!
我已经阅读过这里提出的关于如何提高性能的问题,例如,提一下提高SQLite的每秒INSERT性能?什么是源码的非常大的数据库文件的性能特点?

我正在努力使sqlite工作的数据库文件大小为5千兆字节.相反,那里有人,即使数据库大小高达160 GB,他们声称sqlite对他们来说"很棒".我自己没有尝试过,但是从提出的问题来看,我想所有的基准测试都可能只用数据库中的表来完成.

我使用的数据库
- 20页左右的表
-表中有一半以上的15列
-每个15或那么列的表都有6/7的外键列-其中的几个表已经长大在一个月内拥有2700万条记录

我使用的开发机器是3 GHz四核机器,有4 GB RAM,但只需要3分钟就可以查询这些大表中的row_count.

我找不到任何方法来水平划分数据.我拥有的最佳镜头是将数据分成多个数据库文件,每个表一个.但在这种情况下,据我所知,外键列约束不能使用,所以我将不得不创建一个自足表(没有任何外键).

所以我的问题是
a)我是否使用错误的数据库进行工作?
b)你觉得我哪里出错了?
c)我还没有在外键上添加索引,但如果只是行计数查询需要四分钟,外键索引如何帮助我?

编辑提供更多信息,即使没有人要求它:)我使用SQLite版本3.7.9与system.data.sqlite.dll版本1.0.77.0

EDIT2:我认为我与160位演员的不同之处在于他们可以选择单独的唱片或小范围的唱片.但是我必须在表中加载所有2700万行,将它们与另一个表连接起来,按照用户的要求对记录进行分组并返回结果.有什么输入是为这些结果优化数据库的最佳方法.

我不能缓存先前查询的结果,因为它在我的情况下没有意义.点击缓存的可能性相当低.

sqlite select database-performance

7
推荐指数
1
解决办法
8775
查看次数