Database 针对.net的SQLite性能建议

Database 针对.net的SQLite性能建议,database,vb.net,sqlite,Database,Vb.net,Sqlite,我在应用程序中使用SQLite。这个场景是,我有股票市场数据,每个公司都是一个数据库,有一个表。该表存储的记录从几千到五十万不等 当前,当我在实时I-openconnection中更新数据时,请检查该特定数据是否存在。如果没有,则插入它并关闭连接。然后在循环中完成此操作,并更新每个数据库(代表一个公司)。插入的记录数很低,这不是问题所在。但这个过程可以吗 另一种方法是使用一个数据库和多个表(每个公司可以是一个表),每个表可以有很多记录。这样好还是不好 你可以预计大约有500家公司。我正在VS20

我在应用程序中使用SQLite。这个场景是,我有股票市场数据,每个公司都是一个数据库,有一个表。该表存储的记录从几千到五十万不等

当前,当我在实时I-openconnection中更新数据时,请检查该特定数据是否存在。如果没有,则插入它并关闭连接。然后在循环中完成此操作,并更新每个数据库(代表一个公司)。插入的记录数很低,这不是问题所在。但这个过程可以吗

另一种方法是使用一个数据库和多个表(每个公司可以是一个表),每个表可以有很多记录。这样好还是不好


你可以预计大约有500家公司。我正在VS2010中编写代码。语言是VB.NET。

我做了类似的事情,在另一个字段中使用了相似大小的数据。这在很大程度上取决于你的索引。最终,分离每个大表是最好的(每个文件1个表,代表一个内聚单元,在您的案例中是一家公司)。此外,与具有相同方案的x个不同名称的表相比,您还可以获得每个公司表具有相同名称的优势(并且不需要对公司名称进行清理以生成新表)


在内部,其他DBMS通常在其内部结构中每个表至少保留一个文件,因此SQL只是其上面的一个抽象层。SQLite(尽管其概念者夸耀)适用于小型项目,查询大型数据模型将变得更加挑剔,以使其工作良好。

数据的最佳组织方式是使其正确规范化,即将所有数据放在带有公司列的单个表中。 这对性能更好,因为减少了与表和数据库相关的开销


使用索引可以加快查询速度,但需要什么索引取决于实际查询。

我将阅读一些关于数据库规范化和数据库布局的文章。我觉得你把事情复杂化了。一个数据库,一个记录表,其中包含公司表的外键。否则,这个问题仍然很模糊。a)不是2个查询,而是使用UPSERT(可能是sp)根据需要插入或更新b)使用事务。这是很多SQLite的数据,但是我可能会考虑MySQL(加上DB设计元素),你只需要一个标识符来指示公司不是一个全新的表。我不使用事务,因为每X分钟只插入1条记录。问题是大量的数据库正在更新。最大记录大约是30万,而不是我前面提到的50万。对于有30万条记录的数据库,文件大小小于20 MB。我应该坚持使用SQLite还是使用mysql。我认为厄普塞特在这里做不了这项工作。如果记录不存在,我只想插入它。如果它存在,那么什么也不做。对于插入,您可以这样做来简化您的逻辑:感谢@MPelletier提供了插入或忽略解决方案。我认为SQLite会自动在主键上创建索引。我只有一个主键,所以我应该自己创建索引还是不需要索引。是MySQL for windows比SQLite快。只制作您需要的索引。主键肯定有一个索引,所以如果不需要更多,就不要添加更多。是的,MySQL会更快。不过,它的设置更多,而且不要忘记定期备份(不管是哪种情况,我都会考虑)。我想我会坚持使用SQLite,因为我想构建一个占地面积小的windows应用程序。我的意思是安装应该简单易行。SQLite易于安装和使用。事实上,应用程序只需要两个DLL。我认为这不是一个好主意,因为如果我将所有记录放在一个包含公司列的表中,那么将有数百万条记录。假设一家公司有超过十万条记录,而我有500家公司的数据,那么它就会变成5000万条记录(至少)。那张表的数据太多了。为什么会有太多的数据?你认为会有什么变化?你们是否真的测量了它,得到了与其他人不同的结果?我并没有测量任何东西,但你们不认为执行诸如搜索、插入或更新等操作会花费更长的时间,因为数据库必须处理如此多的记录。此外,有人提到SQLite是用于小型数据库的,如果记录数量大幅增加,那么就使用MySql,我不想使用它。B树上的操作不会以与其大小相同的速度变慢(实际上是O(logn)),SQLite和MySQL都需要索引来高效地搜索大型表。只有MySQL有一个功能,就是能够将一个数据库分区到多个磁盘上,但您离这还很远。因此,您的建议是,我有一个数据库,其中有一个表,用于存储股票的所有记录。即使记录达到五千万以上也无所谓。据您所知,这将产生比拥有多个数据库更好的性能。