mormot当作内存数据库(缓存)使用
mormot当作内存数据库(缓存)使用
mormot的TSQLRestStorageInMemory可以作为内存数据库来使用。

上图是在笔者4代I5笔记本上做的测试,增加10万记录,耗时:562毫秒。
增加的数据如下图所示(默认是JSON,当然也可以存为二进制格式的):

下面附上测试代码:
/// <author>cxg 2018-9-17</author>
/// mormot 数据缓存 unit Unit1; interface uses
SynCommons, SynDB, mORMot, mORMotDB, SynDBSQLite3, SynSQLite3Static, Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ToolWin, Vcl.ComCtrls; type
/// <summary>
/// 缓存的记录
/// </summary>
TPerson = class(TSQLRecord)
private
FNo: integer;
FName: string;
published
property No: Integer read FNo write FNo;
property Name: string read FName write FName;
end; type
TForm1 = class(TForm)
Label1: TLabel;
edtId: TEdit;
Label2: TLabel;
edtName: TEdit;
ToolBar1: TToolBar;
btnAdd: TToolButton;
btnAdds: TToolButton;
btnUpdate: TToolButton;
btnFind: TToolButton;
btnDelete: TToolButton;
btnDeleteAll: TToolButton;
mmo1: TMemo;
procedure btnAddClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnFindClick(Sender: TObject);
procedure btnAddsClick(Sender: TObject);
procedure btnUpdateClick(Sender: TObject);
procedure btnDeleteAllClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
private
{ Private declarations }
FMemDB: TSQLRestStorageInMemory;
FModel: TSQLModel;
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btnAddClick(Sender: TObject);
var
LPerson: TPerson;
begin
try
LPerson := TPerson.Create;
LPerson.No := StrToInt(edtId.Text);
LPerson.Name := edtName.Text;
if FMemDB.Add(LPerson, True) = 0 then
begin
ShowMessage('增加失败');
end
else
begin
edtId.Clear;
edtName.Clear;
edtId.SetFocus;
end;
finally
LPerson.Free;
end;
end; procedure TForm1.btnAddsClick(Sender: TObject);
var
a, b, c: Cardinal;
i: Integer;
LPerson: TPerson;
begin
a := GetTickCount;
try
LPerson := TPerson.Create; for i := 0 to 100000 do
begin
LPerson.no:= i;
LPerson.Name := RandomGUID.ToString;
if FMemDB.Add(LPerson, True) = 0 then
begin
mmo1.Lines.Add('失败: ' + i.ToString);
end;
end;
b := GetTickCount;
c := b - a;
mmo1.Lines.Add('耗时: ' + c.ToString + ' 毫秒');
finally
LPerson.Free;
end;
end; procedure TForm1.btnDeleteAllClick(Sender: TObject);
begin
FMemDB.DropValues;
end; procedure TForm1.btnDeleteClick(Sender: TObject);
var
LNo: string;
begin
LNo := '';
if FMemDB.Delete(TPerson, LNo) then
begin
mmo1.Lines.Add('删除成功');
end else
begin
mmo1.Lines.Add('删除失败');
end; end; procedure TForm1.btnFindClick(Sender: TObject);
var
LPerson: TPerson;
begin
LPerson := TPerson.Create(FMemDB, 'Id=?', [edtId.Text]);
if LPerson <> nil then
begin
edtId.Text := LPerson.no.ToString;
edtName.Text := LPerson.Name;
end;
end; procedure TForm1.btnUpdateClick(Sender: TObject);
var
LPerson: TPerson;
begin
LPerson := TPerson.Create;
LPerson.no := StrToInt(edtId.Text);
LPerson.Name := edtName.Text; if FMemDB.Update(LPerson) then
begin
mmo1.Lines.Add('更新成功: ' + LPerson.no.ToString);
end
else
begin
mmo1.Lines.Add('更新失败: ' + LPerson.no.ToString);
end;
LPerson.Free;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
FModel := TSQLModel.Create([TPerson]);
FMemDB := TSQLRestStorageInMemory.Create(TPerson, nil, 'test.db');
end; procedure TForm1.FormDestroy(Sender: TObject);
begin
FModel.Free;
FMemDB.Free;
end; end.
mormot当作内存数据库(缓存)使用的更多相关文章
- 用redis当作LRU缓存
原文地址:https://redis.io/topics/lru-cache Redis可以用来作缓存,他可以很方便的淘汰(删除)旧数据添加新数据,类似memcached.LRU只是其中的一种置换算法 ...
- Redis 详解 (一) StackExchange.Redis Client
这期我们来看StackExchange.Redis,这是redis 的.net客户端之一.Redis是一个开源的内存数据存储,可以用来做数据库,缓存或者消息代理服务.目前有不少人在使用ServiceS ...
- StackExchange.Redis Client
StackExchange.Redis Client 这期我们来看StackExchange.Redis,这是redis 的.net客户端之一.Redis是一个开源的内存数据存储,可以用来做数据库,缓 ...
- Spring Data Redis 让 NoSQL 快如闪电 (1)
[编者按]本文作者为 Xinyu Liu,详细介绍了 Redis 的特性,并辅之以丰富的用例.在本文的第一部分,将重点概述 Redis 的方方面面.文章系国内 ITOM 管理平台 OneAPM 编译呈 ...
- 前端学HTTP之重定向和负载均衡
前面的话 HTTP并不是独自运行在网上的.很多协议都会在HTTP报文的传输过程中对其数据进行管理.HTTP只关心旅程的端点(发送者和接收者),但在包含有镜像服务器.Web代理和缓存的网络世界中,HTT ...
- redis该如何分区-译文(原创)
写在最前,最近一直在研究redis的使用,包括redis应用场景.性能优化.可行性.这是看到redis官网中一个链接,主要是讲解redis数据分区的,既然是官方推荐的,那我就翻译一下,与大家共享. P ...
- PHPExcel中文开发手册翻译版(2)
2016年8月18日12:45:14 请注意这个是粗翻译版,仅供参考,不是精校版 精校版后面才会更新 PHPExcel开发者文档 1.目录 2. 4先决条件 2.1.软件要求4 2.2.安装说明4 2 ...
- 控制器层(Controllers)
本章译者:@freewind 业务逻辑代码通常位于模型(model)层.客户端(比如浏览器)无法直接调用其中的代码,所以模型对象提供的功能,必须作为资源以URI方式暴露给外部. 客户端使用HTTP协议 ...
- Linux内存管理原理
本文以32位机器为准,串讲一些内存管理的知识点. 1. 虚拟地址.物理地址.逻辑地址.线性地址 虚拟地址又叫线性地址.linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)(在用户态,内核态逻 ...
随机推荐
- python3项目之数据可视化
数据可视化指的是通过可视化表示来探索数据,它与数据挖掘紧密相关,而数据挖掘指的是使用代码来探索数据集的规律和关联. 数据科学家使用Python编写了一系列令人印象深刻的可视化和分析工具,其中很多也可供 ...
- 配置sql server 2000以允许远程访问
配置sql server 2000以允许远程访问适合故障:1. 用sql企业管理器能访问sql server 2000(因为它是采用命名管道(named pipes)方式进行方式),但用ado.net ...
- SQL语句资料
--语 句 功 能 --数据操作 SELECT --从数据库表中检索数据行和列 INSERT --向数据库表添加新数据行 DELETE --从数据库表中删除数据行 UPDATE --更新数据 ...
- 怎么使用T-sql生成两位字母
SQL code select char(cast(rand()*25 as int)+97)+char(cast(rand()*25 as int)+97) select 两 ...
- GreenPlum学习笔记:date_part与extract提取日期时间、时间差
GP可以使用date_part / extract从日期时间类型中抽取部分内容. 方法一:extract 格式:extract(field from source) extract函数从日期.时间数 ...
- RabbitMQ错误检查
今天使用RabbitMQ做数据下发操作,当在发送端声明了Exchange后 打开RabbitMQ的管理控制台,可以查看,其中已经创建了Exchange 但并没有Queue 接着运行接收端,发现以下错误 ...
- TP5:使用了INPUT函数来接收参数了,还需再过滤SQL注入吗
TP5:使用了INPUT函数来接收参数了,还需再过滤SQL注入吗,默认的INPUT函数都做了哪些动作啊 有了PDO参数绑定 基本上不需要考虑sql注入的问题(除非自己拼接SQL),需要考虑的是XSS方 ...
- Mendeley文献管理软件使用介绍
<!DOCTYPE html> New Document /* GitHub stylesheet for MarkdownPad (http://markdownpad.com) / / ...
- yum安装(sentos7)
之前我的yum一直出问题,我就重装了yum,这个教程是我亲自测试过,有用的. 链接:http://blog.csdn.net/iamhuanggua/article/details/60140867 ...
- java UTF8 HEX
private final static char[] hexArray = "0123456789ABCDEF".toCharArray(); public static Str ...