FlashDB之KVDB写入速度实验

实验目的:初步评估写入速度

硬件平台:F407+SPIFlash

代码如下:

 for (count = 1; count < 30000; count++) {
        snprintf(key,128,"%010d", count);
        snprintf(val,128,"2024-06-07 14:39 %8d", count);
        fdb_kv_set(kvdb, key, val);
        FDB_INFO("insert [%d]", count);
        { /* GET the KV value */
        char *return_value, temp_data2[30] = { 0 };

        /* Get the "temp" KV value.
         * NOTE: The return value saved in fdb_kv_get's buffer. Please copy away as soon as possible.
         */
        return_value = fdb_kv_get(kvdb, key);
        /* the return value is NULL when get the value failed */
        if (return_value != NULL) {
            strncpy(temp_data2, return_value, sizeof(temp_data2));
            FDB_INFO("get the  value is: %s\n", temp_data2);
             }
         }
             
         }

在只有几条数据时,写入也需要40ms

[18:41:39.933]收←◆S
[18:41:40.064]收←◆ystem Clock information
SYSCLK_Frequency = 168000000
HCLK_Frequency   = 168000000
PCLK1_Frequency  = 42000000
PCLK2_Frequency  = 84000000
[SFUD]Find a Winbond W25Q128JV flash chip. Size is 8388608 bytes.
[SFUD](..\sfud\src\sfud.c:840) Flash device reset success.
[SFUD]norflash0 flash device is initialize success.
[D/FAL] (fal_flash_init:47) Flash device |                norflash0 | addr: 0x00000000 | len: 0x00800000 | blk_size: 0x00001000 |initialized finish.
[32;22m[I/FAL] ==================== FAL partition table ====================[0m
[32;22m[I/FAL] | name      | flash_dev |   offset   |    length  |[0m
[32;22m[I/FAL] -------------------------------------------------------------[0m
[32;22m[I/FAL] | fdb_tsdb1 | norflash0 | 0x00000000 | 0x00100000 |[0m
[32;22m[I/FAL] | fdb_kvdb1 | norflash0 | 0x00100000 | 0x00100000 |[0m
[32;22m[I/FAL] =============================================================[0m
[32;22m[I/FAL] Flash Abstraction Layer (V0.5.99) initialize success.[0m
[FlashDB][kv][env][fdb_kvdb1] (..\..\..\src\fdb_kvdb.c:1777) The oldest addr is @0x00000000
[FlashDB][kv][env][fdb_kvdb1] (..\..\..\src\fdb_kvdb.c:1793) KVDB size is 1048576 bytes.

[18:41:40.144]收←◆[FlashDB] FlashDB V2.1.0 is initialize success.
[FlashDB] You can get the latest version on https://github.com/armink/FlashDB .
[FlashDB][sample][kvdb][basic] ==================== kvdb_basic_sample ====================
[FlashDB][sample][kvdb][basic] get the 'boot_count' value is 1

[18:41:40.206]收←◆[FlashDB][sample][kvdb][basic] set the 'boot_count' value to 2
[FlashDB][sample][kvdb][basic] ===========================================================
[FlashDB][sample][kvdb][string] ==================== kvdb_type_string_sample ====================

[18:41:40.257]收←◆[FlashDB][sample][kvdb][string] create the 'temp' string KV, value is: 36C
[FlashDB][sample][kvdb][string] get the 'temp' value is: 36C
[FlashDB][sample][kvdb][string] 
[18:41:40.297]收←◆set 'temp' value to 38C
[FlashDB][sample][kvdb][string] delete the 'temp' finish
[FlashDB][sample][kvdb][string] ===========================================================
[FlashDB][sample][kvdb][blob] ==================== kvdb_type_blob_sample ====================

[18:41:40.350]收←◆[FlashDB][sample][kvdb][blob] create the 'temp' blob KV, value is: 36
[FlashDB][sample][kvdb][blob] get the 'temp' value is: 36
[FlashDB][sample][kvdb][blob] set 'temp' 
[18:41:40.372]收←◆value to 38
[FlashDB][sample][kvdb][blob] delete the 'temp' finish
[FlashDB][sample][kvdb][blob] insert [1][FlashDB][sample][kvdb][blob] get the  value is: 2024-06-07 14:39        1
[FlashDB][sample][kvdb][bl
[18:41:40.416]收←◆ob] insert [2][FlashDB][sample][kvdb][blob] get the  value is: 2024-06-07 14:39        2
[FlashDB][sample][kvdb][blob] insert [3][FlashDB][sample][kvdb][blob] get the  value is: 2024-06-07 14:39        3

[18:41:40.460]收←◆[FlashDB][sample][kvdb][blob] insert [4][FlashDB][sample][kvdb][blob] get the  value is: 2024-06-07 14:39        4
[FlashDB][sample][kvdb][blob] insert [5][FlashDB][sample][kvdb][blob] get the  value is: 2024-06-07 14:39        5

[18:41:40.508]收←◆[FlashDB][sample][kvdb][blob] insert [6][FlashDB][sample][kvdb][blob] get the  value is: 2024-06-07 14:39        6
[FlashDB][sample][kvdb][blob] insert [7][FlashDB][sample][kvdb][blob] get the  value is: 2024-06-07 14:39        7

[18:41:40.555]收←◆[FlashDB][sample][kvdb][blob] insert [8][FlashDB][sample][kvdb][blob] get the  value is: 2024-06-07 14:39        8
[FlashDB][sample][kvdb][blob] insert [9][FlashDB][sample][kvdb][blob] get the  value is: 2024-06-07 14:39        9

[18:41:40.605]收←◆[FlashDB][sample][kvdb][blob] insert [10][FlashDB][sample][kvdb][blob] get the  value is: 2024-06-07 14:39       10

在读写5781条处,用时2.3秒。

在读写9301条处,用时3.686秒。

3个小时写入约3587条数据(9367-5780)。

  • 18
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FlashDB STM(Structured Transactional Memory)是一种基于闪存的结构化事务内存技术。事务内存是一种并发控制机制,用于管理并发程序访问和修改共享数据的方式。闪存是一种高速非易失性存储介质,具有较高的读取和写入速度,以及数据持久存储的特性。 FlashDB STM利用闪存的快速读速度和持久性,为并发程序提供了更好的性能和可靠性。与传统的基于内存的事务内存技术相比,FlashDB STM能够将事务数据持久存储在闪存中,避免了由于服务器故障或断电等原因而导致的数据丢失。此外,FlashDB STM还能够通过闪存的并行读能力,提高并发程序的处理速度FlashDB STM还提供了一套丰富的API接口,方便开发人员使用和管理事务。开发人员可以通过简单的函数调用实现事务的开始、提交或回滚操作,并且可以根据需要进行锁定和解锁等操作。这些功能使得并发程序的开发和管理更加简单和灵活。同时,FlashDB STM还提供了基于日志的恢复机制,保证了数据的一致性和完整性。 总之,FlashDB STM技术通过利用闪存的快速读和持久性特性,为并发程序提供了高性能和可靠性的解决方案。它是一种创新的事务内存技术,适用于需要高并发和大规模数据处理的场景。随着闪存技术的不断发展和成熟,FlashDB STM有望在未来的数据存储和处理领域发挥更重要的作用。 ### 回答2: FlashDB STM 是一种基于闪存存储的事务性内存数据库。它是由研究人员开发的,旨在解决传统内存数据库在大规模数据写入时的性能瓶颈问题。 FlashDB STM 利用了闪存存储器的高速读取和持久性特性,并结合了事务性内存的思想,为应用程序提供了高效的读操作。与传统的内存数据库相比,FlashDB STM 具有更高的容量和更快的存储速度,同时也具备了数据持久性,可在系统崩溃或断电时保证数据的完整性。 FlashDB STM 的设计基于一种称为STM(Software Transactional Memory)的技术。STM 在多线程并发访问下保证了数据的一致性,并通过将所有修改操作封装在事务中,确保了数据的完整性和可靠性。当多个事务同时修改相同的数据时,STM 会使用冲突检测和冲突解决机制来避免数据的丢失或不一致。 FlashDB STM 的应用场景非常广泛。它可以用于高并发读的应用程序,如电子商务网站、金融交易系统等。通过提供快速的数据操作和数据持久性,FlashDB STM 可以极大地提升应用程序的性能和稳定性。 总之,FlashDB STM 是一种基于闪存存储的事务性内存数据库,它利用了闪存存储器的高速读和持久性特性,通过 STM 技术保证数据的一致性,适用于高并发读的应用场景,可以提升应用程序的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值