导航:首页 > 网络数据 > sqlite能存储大数据吗

sqlite能存储大数据吗

发布时间:2023-02-05 11:24:06

㈠ sqlite3到底能支持多大的数据量

你的操作系统,文件系统是什么版本? 操作系统本身对文件大小的限制是什么?

还真没听说过sqlite支持TB级,它的大小受制于运行时的文件系统。

下面是原文解释支持的大小:

Every database consists of one or more "pages". Within a single database, every page is the same size, but different database can have page sizes that are powers of two between 512 and 65536, inclusive. The maximum size of a database file is 2147483646 pages. At the maximum page size of 65536 bytes, this translates into a maximum database size of approximately 1.4e+14 bytes (140 terabytes, or 128 tebibytes, or 140,000 gigabytes or 128,000 gibibytes).

㈡ android开发中有没有可视化的工具对sqlite数据库进行操作

机顶盒,android,小型电子设备使用的数据库见到的多是sqlite数据库。sqlite数据库,是轻量级的,可以存储大量数据。包括图片,音频,视频。android使用的内置数据库,正是sqlite。下面分部讲解androidsqlite使用方法。

电脑一台
sqlite数据库工具

定义连接名字,选择数据库类型,建立数据库文件,点击ok。此时建立数据库的准备工作已经完成了。

打开连接,打开数据库,建立数据表。

建立字段属性,可以添加,修改,删除属性。同时,还可以设置主属性。

可以导入其他文本格式创建的db,如表格,html,txt等格式

表内添加数据,进行命令行操作。

关闭连接,关闭数据库操作。

㈢ sqlite3到底能支持多大的数据量

sqlite版本:sqlite3
操作系统:暂时测试是在window下,部署是在linux下的
磁盘格式:NTFS
数据库要求:由于sqlite不支持分区,建20000个表,每个表插入86400条数据,需要没秒对着20000个表中的一条记录进行修改。这是极限情况,正常使用也就是没5s对20000个表同时修改一下。
顺便再问下:sqlite只能同时存在一个写的连接吗?有没有什么办法可以让它同时多个连接进行写入。

㈣ SQLite 的读写效率很高,有哪些使用其他数据库的理由

SQLite 的读写效率很高,有哪些使用其他数据库的理由
1、sqlite定位是嵌入式数据库,只能本地嵌入其它进程来工作,无法被远程的客户端访问,需要上层应用来处理这些事情;
2、sqlite设计上就不是为大数据量考虑的,因此别指望它存海量数据;
3、sqlite适合单线程访问,对多线程高并发的场景不适用;
4、各种数据库高级特性它都不支持,比如管理工具、分析工具、维护等等;
所以还是要根据场景选择合适的数据库,嵌入式用SQLite是相当不错的,但绝大多数场景还是要用MySQL/SqlServer/MongoDB这类的数据库。

㈤ SQLite最多能存多大的数据量

您好,我来为您解答:
sqlite本身最大支持2TB的数据量。
希望我的回答对你有帮助。

㈥ 为什么我往sqlite的表里最多只能存1000条数据是有这样数量限制还是有需要设置的地方

是可以存的,只是可能你所使用的可视化工具每一页最多显示1000条,可以寻找翻页按钮查看剩余数据

㈦ SQLite数据库,文本最大能是多大谢谢了,大神帮忙啊

理论上只要硬盘够大…… 没有必要挑战最大吧?这是嵌入式数据库,都不大的。如果你的数据库超过1G大,我就建议你换用大型数据库,sqlserver、甲骨文等。

㈧ 在使用sqlite时有什么需要注意的地方吗

首先介绍我用Sqlite解决的实际问题是什么?
问题1:某个功能的数据需要连接一个远程数据库查询速度很慢,查一次数据不容易,希望能够重复利用之前查过的数据集。
问题2:非常大的数据量比如几千万甚至几亿条数据,一次性读取到DataTable中,会内存溢出的,所以在第一次分析时就是通过Reader的方式,分析完一条后并不在内存中保存,但是紧接着用户的第二次分析、第三次分析还是要用到的第一次分析的数据,如果我们重新查询一次远程服务器,效率可想而知啊。
结合上面的2个问题,为了解决效率问题和数据重复利用度,减少数据库服务器的压力,我才用Sqlite缓存数据(当然这不是唯一也不是最好的解决方案) 。
优化SQLiteHelper
陆兄的SQLiteHelper类我增加了几个有用的方法:
第一个方法是GetSchema,得到某个表的表结构。
/// <summary>
/// 查询数据库中的所有数据类型信息
/// </summary>
/// <returns></returns>
public DataTable GetSchema()
{
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();
DataTable data = connection.GetSchema("TABLES");
connection.Close();
//foreach (DataColumn column in data.Columns)
//{
// Console.WriteLine(column.ColumnName);
//}
return data;
}
}

第二个方法是IsTableExist,判断SQLite数据库重某个表是否存在 。
/// <summary>
/// 判断SQLite数据库表是否存在
/// </summary>
/// <param name="dbPath">要创建的SQLite数据库文件路径</param>
public bool IsTableExist(string tableName)
{
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();
using (SQLiteCommand command = new SQLiteCommand(connection))
{

command.CommandText = "SELECT COUNT(*) FROM sqlite_master where type='table' and name='" + tableName + "'";
int iaaa = Convert.ToInt32(command.ExecuteScalar());
if (Convert.ToInt32(command.ExecuteScalar()) == 0)
{
return false;
}
else
{
return true;
}
}
}
}

第三个方法是Query,执行查询语句,返回DataSet
/// <summary>
/// 执行查询语句,返回DataSet
/// </summary>
/// <param name="SQLString">查询语句</param>
/// <returns>DataSet</returns>
public DataSet Query(string SQLString)
{
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
DataSet ds = new DataSet();
try
{
connection.Open();
SQLiteDataAdapter command = new SQLiteDataAdapter(SQLString, connection);
command.Fill(ds, "ds");
}
catch (System.Data.SQLite.SQLiteException ex)
{
throw new Exception(ex.Message);
}
return ds;
}
}

构建缓存对象模型和缓存控制器
每一块缓存对象,在数据库中会产生一个表,而表名称是有缓存控制器自动生成的,访问缓存的工作全部交由缓存控制器完成,通过缓存项的ID和MoleKey来访问。
在Sqlite中还需要一个系统表来维护每个缓存项和实际缓存存储表之间的对应关系,我们称之为配置表,它将在缓存控制器创建Sqlite缓存数据库文件时创建。
配置表共有以下几个字段,分别和缓存对象模型CdlCacheItem类映射:
列名称 说明
Id 缓存的唯一数字编号
MoleKey 缓存模块名称,一个模块可以有多个缓存数据,ID可以区分。实际应用时,某个功能时会经常缓存数据的,所以通过MoleKey就可以得到这个功能所有的缓存列表,然后选定其中的部分缓存来进行使用。
Comments 缓存说明
TableName 缓存数据存储的数据表名称
AddDate 缓存时间戳
创建数据库的方法如下:
static void CreateDB()
{
//总共有ID、MoleKey、Comments、AddDate这几列
string sql = "CREATE TABLE SYSCDLTABLES(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,MODULEKEY VARCHAR(200),COMMENTS VARCHAR(500),TABLENAME VARCHAR(100),ADDDATE DATETIME)";
SQLiteDBHelper.CreateDB(CACHEFILEPATH, sql);
}

每个缓存项(缓存对象模型)定义如下,和配置表对应:
/// <summary>
/// 缓存项对象
/// </summary>
/// <Author>Tecky Lee</Author>
/// <Date>2011-1-11 15:11</Date>
public class CdlCacheItem
{
int m_id;

public int Id
{
get { return m_id; }
set { m_id = value; }
}
string m_moleKey;

public string MoleKey
{
get { return m_moleKey; }
set { m_moleKey = value; }
}
string m_comments;

public string Comments
{
get { return m_comments; }
set { m_comments = value; }
}
string m_tableName;

public string TableName
{
get { return m_tableName; }
set { m_tableName = value; }
}
DateTime m_timestamp;

public DateTime Timestamp
{
get { return m_timestamp; }
set { m_timestamp = value; }
}
}

下面是控制器的接口定义:
public interface ICdlCacheController
{
void BeginLoadRow();
void EndLoadRow();
System.Collections.Generic.IList<CdlCacheItem> GetCdlCacheItems(string moleKey);
CdlCacheItem GetCdlCacheItems(int id);
void LoadRow(System.Data.DataRow row, string tableName);
void LoadRow(IEnumerable<object> row, string tableName);
string LoadTable(System.Data.DataTable dt, string moleKey, string comments);
System.Data.Common.DbDataReader QueryCdlTableReader(CdlCacheItem item);
System.Data.DataTable QueryCdlTables(CdlCacheItem item);
System.Data.DataTable QueryCdlTables(string sql);
void RemoveAllTables();
void RemoveCdlTables(string moleKey);
void RemoveCdlTables(System.Collections.Generic.IList<CdlCacheItem> items);
void RemoveCdlTables(CdlCacheItem item);
void RemoveCdlTables(int id);
}

上面的函数下面来做个说明:
1、BeginLoadRow、LoadRow和EndLoadRow,三个函数组为了在我们查询主数据库时使用Reader方式读取数据时,可以一条条将数据同时存放在缓存中。
2、RemoveAllTables和RemoveCdlTables是用来删除缓存项的。
3、GetCdlCacheItems,通过moleKey得到多个缓存项。比如用户想基于这几天内保存的某个功能的数据做一次快速分析,那么我们就可以通过这个函数得到缓存列表,由用户选择列表中的一个来继续。
4、QueryCdlTableReader,得到某个缓存数据的Reader对象,这样可以一行行的分析,一次读出大数据量的数据到DataTable中,内存可能会溢出的。
5、QueryCdlTables,将某个缓存项查询并装载到DataTable中。

提高缓存数据写入效率
Sqlite在保存数据的时候,比如一次保存一个亿条的数据,一条条插入效率非常低下,网上也有人对其进行讨论。
效率低下的主要原因在于IO操作次数过于频繁,所以在LoadTable或者是使用BeginLoadRow·EndLoadRow的时候,使用了事务来减少数据提交的次数,结果保存的效率非常的高,我测试的结果是400万条数据查询,只需要几十秒钟,这点时间相对于重新查一次远程服务器那是可以忽略了。
下面给出BeginLoadRow和EndLoadRow的具体代码(只有在EndRow的时候才会提交一次数据):
SQLiteConnection m_connection;
SQLiteCommand m_command;
DbTransaction m_transaction;
public void BeginLoadRow()
{
m_connection = new SQLiteConnection("Data Source=" + CACHEFILEPATH);

m_connection.Open();
m_transaction = m_connection.BeginTransaction();
m_command = new SQLiteCommand(m_connection);
}
public void EndLoadRow()
{
try
{
if (m_command != null)
m_command.Dispose();

if (m_transaction != null)
{
m_transaction.Commit();
}

if (m_connection != null)
{
m_connection.Close();
m_connection.Dispose();
}
}
catch (System.Exception ex)
{
LogHandle.Error(ex);
}
}

LoadTable函数内部也是调用BeginLoadRow·EndLoadRow模式来完成的。

数据库文件如何创建:
Sqlite数据库文件如果不存在,在执行sql语句的时候,会自动根据ConnetionString中指定的位置创建数据库文件,默认创建的空数据库只有4K。
其他有待讨论的问题:
1、我是将所有的缓存做到一个数据库文件中了,实际应用根据业务的不同,可以一份缓存数据一个文件也是很好管理的,维护也方便,资源管理器中就可以拷贝删除等。
2、当我们存储一亿条数据到Sqlite的时候,因为Sqlite没有压缩数据,结果数据库文件就可以会有好几个G(这也不一定,适合数据库字段的多少,字段类型有关的)。
文件太大就消耗了磁盘空间,而且用户或者程序如果不及时清理的,可能会耗尽磁盘空间。
这里就必须建立一个机制,检查sqlite的缓存并及时清理,或者设置缓存应用的上限,当达到上限后自动根据时间戳清理历史缓存。

转载

阅读全文

与sqlite能存储大数据吗相关的资料

热点内容
苹果手机微信视频怎么有杂音 浏览:317
滁州数控编程培训怎么样 浏览:656
微信红包下面有个盾牌 浏览:767
win10智能家居 浏览:620
qq飞车鸡字怎么获得 浏览:618
评论区给一星保护的app是什么 浏览:356
设置怎么没有网络模式 浏览:711
什么app可以借5000 浏览:304
iqoo如何关闭一张卡的数据流量 浏览:212
人物建模教程 浏览:271
有什么ppt免费的网站 浏览:74
声音文件扩展名分别有哪些 浏览:476
复兴号叫外卖用什么App 浏览:478
网上医生app 浏览:307
java创建一个list 浏览:866
鸿蒙系统如何解除桌面文件夹 浏览:128
word嵌套文件打不开 浏览:982
最牛的数据是什么 浏览:291
家庭电脑如何安装数据 浏览:999
用ps如何将文件填充 浏览:986

友情链接