[Digikam-devel] extragear/graphics/digikam

Gilles Caulier caulier.gilles at gmail.com
Sat Jun 27 20:41:21 BST 2009


Marcel,

Perhaps we can try to mesure performance of thumbs DB using mysql Qt4
plugin ? This DB schema is simple and can be ported easily...

What do you think ?

Gilles


2009/6/27 Andi Clemens <andi.clemens at gmx.net>:
> SVN commit 988322 by aclemens:
>
> Removing this code again, it will not make things faster.
>
> I did a lot of I/O performance testing now and at least with our sqlite3
> solution, we really have reached the limit, it is just not performing
> well on bigger collections.
>
> My thumbsDB is 970MB big, and when the disk cache has not been already
> filled, querying the database is painfully slow.
> This is not digiKam's fault, it can be easily reproduced in the sqlite3
> command line tool.
>
> as root:
> sync
> echo 1 > /proc/sys/vm/drop_caches
>
> Now your disk cache is cleared, as if the system just started up.
> Run a simple query on a bigger thumbsDB like:
>
> select count(*) from thumbnails where type = 0;
>
> Even though this query delivers no results, it takes up to 20 seconds to
> completely parse the table.
>
> When used in digiKam, the application is not responding at all during
> this operation, you get the impression that digiKam just hung up.
>
> I have a large RAM here (4GB), but I don't know what happens if you run
> digiKam 1.0.0 on an average system with 512MB or 1GB RAM.
>
> For me the only solution is to go with embedded MySQL or even a real
> MySQL server solution.
> Because now we don't have just one, but two rather big databases.
>
> CCMAIL:digikam-devel at kde.org
>
>  M  +0 -22     libs/database/thumbnaildb.cpp
>  M  +0 -1      libs/database/thumbnaildb.h
>  M  +0 -18     utilities/batch/batchthumbsgenerator.cpp
>
>
> --- trunk/extragear/graphics/digikam/libs/database/thumbnaildb.cpp #988321:988322
> @@ -150,28 +150,6 @@
>     return filePaths;
>  }
>
> -QHash<QString, int> ThumbnailDB::getInvalidFilePaths()
> -{
> -    QSqlQuery query;
> -    query = d->db->prepareQuery(QString("SELECT path, id "
> -                                        "FROM FilePaths "
> -                                        "   INNER JOIN Thumbnails ON FilePaths.thumbId=Thumbnails.id "
> -                                        "WHERE type BETWEEN %1 AND %2;")
> -                                .arg(DatabaseThumbnail::UndefinedType)
> -                                .arg(DatabaseThumbnail::NoThumbnail));
> -
> -    if (!d->db->exec(query))
> -        return QHash<QString, int>();
> -
> -    QHash <QString, int> filePaths;
> -
> -    while (query.next())
> -    {
> -        filePaths[query.value(0).toString()] = query.value(1).toInt();
> -    }
> -    return filePaths;
> -}
> -
>  void ThumbnailDB::insertUniqueHash(const QString &uniqueHash, int fileSize, int thumbId)
>  {
>     d->db->execSql("REPLACE INTO UniqueHashes (uniqueHash, fileSize, thumbId) VALUES (?,?,?)",
> --- trunk/extragear/graphics/digikam/libs/database/thumbnaildb.h #988321:988322
> @@ -104,7 +104,6 @@
>     void replaceThumbnail(const DatabaseThumbnailInfo &info);
>
>     QHash<QString, int> getValidFilePaths();
> -    QHash<QString, int> getInvalidFilePaths();
>
>  private:
>
> --- trunk/extragear/graphics/digikam/utilities/batch/batchthumbsgenerator.cpp #988321:988322
> @@ -121,26 +121,8 @@
>
>  #ifdef USE_THUMBS_DB
>
> -    /* Not working at the moment, it seems that the NoThumbnail type is not (yet) used, so no results
> -     * are returned from getInvalidFilePaths()
> -
>     if (!d->rebuildAll)
>     {
> -        QHash<QString, int> filePaths = ThumbnailDatabaseAccess().db()->getInvalidFilePaths();
> -
> -        QStringList::iterator it = d->allPicturesPath.begin();
> -        while (it != d->allPicturesPath.end())
> -        {
> -            if (!filePaths.contains(*it))
> -                it = d->allPicturesPath.erase(it);
> -            else
> -                ++it;
> -        }
> -    }
> -    */
> -
> -    if (!d->rebuildAll)
> -    {
>         QHash<QString, int> filePaths = ThumbnailDatabaseAccess().db()->getValidFilePaths();
>
>         QStringList::iterator it = d->allPicturesPath.begin();
> _______________________________________________
> Digikam-devel mailing list
> Digikam-devel at kde.org
> https://mail.kde.org/mailman/listinfo/digikam-devel
>



More information about the Digikam-devel mailing list