相关疑难解决方法(0)

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
查看次数

Python和sqlite3 - 添加数千行

我有一个包含数千个单独插入语句的.sql文件.这一切都需要永远.我试图找到一种更有效地做到这一点的方法.在python中,sqlite3库不能执行".read"或".import"之类的操作,但executecript对于那么多插入来说太慢了.

我安装了sqlite3.exe shell,希望使用".read"或".import"但我无法弄清楚如何使用它.在eclipse中通过django运行它不起作用,因为它期望数据库位于我的C驱动器的根目录,这似乎很愚蠢.通过命令行运行它不起作用,因为它找不到我的数据库文件(除非我做错了)

有小费吗?

谢谢!

python sql sqlite django

6
推荐指数
1
解决办法
1737
查看次数

即使使用事务,SQLite插入也会变慢

即使对于事务,我也遇到了sqlite插入性能问题.我的Android应用程序从Web服务接收大约23.000行,我必须将它们插入到单个表中.

对Web服务进行分区,以便在每次向WS发出请求时收到大约2000行,并在事务中包装2000个插入.完成这些插入后,我将新请求发送到WS并再次使用新事务处理新的2000行.

一开始它工作正常.它每秒执行大量插入操作.但随着时间的推移变得越来越慢,最终每秒有4或3次插入,直到完成23000行.

表的大小有问题吗?当它变大时,插入变慢了?有没有办法改善大量数据的性能?

谢谢你的帮助.

database sqlite performance android transactions

6
推荐指数
1
解决办法
3253
查看次数

提高SQLite的每秒UPDATE性能?

我的问题直接来自这个问题,虽然我只对UPDATE感兴趣并且只对此感兴趣.

我有编写的应用程序中C/C++,这使得大量使用的SQLite,主要是SELECT/UPDATE,在一个非常频繁间隔(约20个查询每0.5至1秒)

我的数据库不大,此刻约有2500条记录,这里是表结构:

CREATE TABLE player (
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   name VARCHAR(64) UNIQUE,
   stats VARBINARY,
   rules VARBINARY
);
Run Code Online (Sandbox Code Playgroud)

到目前为止,我没有使用,transactions因为我正在改进代码并希望稳定而不是性能.

然后我通过仅执行10 update查询来测量我的数据库性能,以下(在不同值的循环中):

// 10 times execution of this
UPDATE player SET stats = ? WHERE (name = ?)
Run Code Online (Sandbox Code Playgroud)

其中stats一个JSON恰好是150个字符,name是5-10个字符.

没有交易,结果是不可接受的: - 大约1整秒(每个0.096)

随着交易,时间下降x7.5倍: - 约0.11 - 0.16秒(每个0.013)

我尝试删除数据库的大部分和/或重新排序/删除列,以查看是否有任何改变,但事实并非如此.即使数据库只包含100条记录(已测试),我也会得到上述数字.

然后我试着玩PRAGMA选项:

PRAGMA synchronous = …
Run Code Online (Sandbox Code Playgroud)

c++ sqlite database-performance

6
推荐指数
1
解决办法
1894
查看次数

将列添加到 sqlite 数据库

我正在尝试将我在 R 中生成的向量作为新列添加到 sqlite 表中。为此,我想使用dplyrdbplyr根据此处的这篇文章,我安装了最新的开发版本以及软件包)。我试过的:

library(dplyr)
library(DBI) 

#creating initial database and table
dbcon      <- dbConnect(RSQLite::SQLite(), "cars.db") 
dbWriteTable(dbcon, name = "cars", value = cars)
cars_tbl <- dplyr::tbl(dbcon, "cars")

#new values which I want to add as a new column 
new_values <- sample(c("A","B","C"), nrow(cars), replace = TRUE) 

#attempt to add new values as column to the table in the database
cars_tbl %>% mutate(new_col = new_values) #not working
Run Code Online (Sandbox Code Playgroud)

实现这一目标的简单方法是什么(不一定使用 dplyr)?

r dplyr rsqlite r-dbi dbplyr

6
推荐指数
1
解决办法
2537
查看次数

C:Windows和其他操作系统中clock()的不同实现?

我必须为大学编写一个非常简单的控制台程序,它必须测量输入所需的时间.

因此我clock()在前面和fgets()通话后使用.在我的Windows计算机上运行时,它工作得很好.然而,当我在我的朋友Mac-Book和Linux-PC上运行时,它给出了非常小的结果(只有几微秒的时间).

我在所有3 OS上尝试了以下代码:

#include <stdio.h>
#include <time.h>
#include <unistd.h>

void main()
{
    clock_t t;

    printf("Sleeping for a bit\n");

    t = clock();

    // Alternatively some fgets(...)
    usleep(999999);

    t = clock() - t;

    printf("Processor time spent: %lf", ((double)t) / CLOCKS_PER_SEC);
}
Run Code Online (Sandbox Code Playgroud)

在Windows上,输出显示1秒(或使用时键入的时间fgets),另外两个操作系统显示的时间不超过0秒.

现在我的问题是为什么clock()在这些操作系统的实现上存在这样的差异.对于Windows来说,当线程处于休眠/等待状态时,时钟似乎仍在滴答作响,但对于Linux和Mac则不然?

编辑:感谢你们到目前为止的答案,所以这只是微软的错误实现.

有人可以回答我的上一个问题:

还有一种方法可以测量我想要使用C标准库在所有3个系统上测量的内容,因为它clock()似乎只在Windows上以这种方式工作吗?

c linux windows macos clock

5
推荐指数
2
解决办法
1078
查看次数

SQLite.Net-PCL 糟糕的性能(InsertOrReplace)

foreach (var tour in Tours)
            {
                await DbInstance.InsertOrReplaceAsync(tour.Guide);
                await DbInstance.InsertOrReplaceAsync(tour.Client);
            }
Run Code Online (Sandbox Code Playgroud)

这个块需要6秒才能执行!?

我的旅游列表中只有 10 个旅游,而且数据库架构非常简单。这里有什么问题?

编辑(解决方案):

为了加快速度,请像这样包装多个事务:

await DbInstance.RunInTransactionAsync(connection =>
        {

           **YOUR FOR LOOP**
           //example
           connection.InsertAsync(tour.Guide);
        });
Run Code Online (Sandbox Code Playgroud)

c# sqlite wpf performance sqlite.net

5
推荐指数
0
解决办法
330
查看次数

DataAdapter.Update() 性能

我有一个相对简单的例程,它查看媒体文件的数据库条目,计算宽度、高度和文件大小,并将它们写回到数据库中。

数据库是 SQLite,使用 System.Data.SQLite 库,处理约 4000 行。我将所有行加载到 ADO 表中,使用新值更新行/列,然后运行 ​​adapter.Update(table); 在上面。

从数据库表加载数据集大约需要半秒,更新所有行的图像宽度/高度并从 FileInfo 获取文件长度可能需要 30 秒。美好的。

适配器.Update(表); 命令在附近某处运行需要 5 到 7 分钟。

这似乎太过分了。ID 是一个 PK INTEGER,因此 - 根据 SQLite 的文档,它本质上是索引的,但即便如此,我还是忍不住想,如果我为每个单独的更新运行单独的更新命令,这会完成得更快。

我曾认为 ADO/适配器的级别相对较低(无论如何与 ORM 相比),这种糟糕的性能让我感到惊讶。谁能解释一下为什么根据本地放置的 SQLite 数据库更新一批约 4000 条记录需要 5-7 分钟?

顺便说一句,是否有某种方法可以“窥视”ADO 如何处理这个问题?内部库逐步执行或...?

谢谢

public static int FillMediaSizes() {
        // returns the count of records updated

        int recordsAffected = 0;

        DataTable table = new DataTable();
        SQLiteDataAdapter adapter = new SQLiteDataAdapter();

        using (SQLiteConnection conn = new SQLiteConnection(Globals.Config.dbAppNameConnectionString))
        using (SQLiteCommand cmdSelect = new …
Run Code Online (Sandbox Code Playgroud)

c# sqlite performance ado.net

5
推荐指数
2
解决办法
5321
查看次数

无需安装的C++数据库访问

我正在寻找一个数据库,我可以运行SQL语句而无需安装数据库服务器.即我只需要数据库文件和任何外部库就能选择/插入/更新数据库.

这是我的情况:

  • 我正在使用C++来解析许多奇怪格式化的二进制文件,我想将它们存储到某种类型的数据库中,以便更方便地访问数据.
  • 将文件插入数据库后,我将使用C#编写用户可以与数据库交互的接口/ GUI.
  • 我正在使用C++来读取文件的速度,因为我已经编写了那部分内容.
  • 我正在使用C#,因为它更容易进行GUI编程.

这是我的要求:

  1. 数据库必须提供一种仅使用外部库在C++中运行命令的方法(无需安装)
  2. 我应该能够将数据库移动到任何(类似的[Windows])计算机并运行我的应用程序

我相信这可以使用ADO或JET等MS Access*.mdb文件,但是,我想听听一些替代方案.请在答案中提供数据库和C++引擎/库.

我的优先事项是:

  1. "精简版" -ness
  2. 性能(插入/选择的速度)
  3. 客户端代码简单(即设置起来容易)

谢谢你们.

c# c++ sql database

4
推荐指数
2
解决办法
993
查看次数

如何解决sqlite3上的瓶颈?

我正在开发一个用 C 编写的项目,该项目生成近 350k 的序列并保存在 sqlite 数据库中。对于每个序列,我必须在表中插入(或忽略)一个字符串,并更新其他表中的一行。

我尝试了这个“指南”,但无法达到每秒超​​过 30k 操作。

我正在使用每个 1M 操作的事务(插入和更新)并且 PRAGMA synchronous=OFF

我有什么选择来解决这个瓶颈?

sqlite

4
推荐指数
1
解决办法
1164
查看次数