首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

大厂的优惠券系统是如何设计的?

领取方式 用户主动领取 or 自动发放被动领取 用券 作用范围 商品、商户、类目 计算方式 是否互斥、是否达到门槛等 需求拆解 商家侧: 创建优惠券 发送优惠券 用户侧: 领取优惠券...异步发送 触达系统 短信、邮件 可通过调用第三方接口的方式实现 站内信 通过数据库插入记录实现 信息表 message create table t_message ( id...查阅站内信的内容时,再将相关的记录插入 message。...t_notify_msg_id_uindex unique (id) ); alter table t_notify_msg add primary key (id); 过期券提醒: 创建优惠券的时候就将需要提醒的记录插入提醒表中...notify_msg 把用户ID+批次ID+通知日期作为唯一索引,防止同一个批次有重复的记录通知,保证每天只会被通知一次 建立notify_time,通知时间索引,每日的通知扫描通过索引列查询,通过索引提高查询效率

5.7K52

PostgreSQL INDEX 简单看 PG INDEX 创建并行原理

,基于多版本控制MVCC, Postgres中的更新包括查找要更新的行,并将该行的新版本插入数据库,引入的问题就是显而易见的,索引,这就需要更多的I/O,数据要重新插入到表上的每个索引中。...插入的过程中需要先读取每个相关的索引,新版本行的物理位置与旧版本的物理位置不同。那一个表中有的索引越多,更改的数据量越大,牵扯的索引的消耗就越大。 ?...从上图可以看,如果没有HOT ,则索引页面更新后,需要另一个指针指向修改后的INDEX 数据, 如果有了HOT 则不需要通过另外的指针 C 去指向修改后的索引,仅仅通过原有的指针,原有的索引tuple1...上通过 t_cid指向新的index的数据即可。...on test (datetime); 通过 pageinspect 对当前的index 页面进行一个细节观测 ?

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

爬虫(105)pymongo, 这一篇文章够了,值得收藏

为了将结果限制作者为“ Mike”的文档中,我们这样做: pprint.pprint(posts.find_one({"author": "Mike"})) 通过ObjectId 查询 post_id...批量插入 为了使查询更加有趣,让我们插入更多文档。除了插入单个文档,我们还可以通过将列表作为第一个参数传递执行批量插入操作insert_many()。...索引 添加索引可以帮助加速某些查询,还可以为查询和存储文档添加其他功能。在此示例中,我们将演示如何在键上创建唯一索引,该键将拒绝索引中已存在该键值的文档。...请注意,我们现在有两个索引:一个是_idMongoDB自动创建索引,另一个是user_id刚刚创建索引。...该索引阻止我们插入user_id已经集合中的文档: duplicate_profile = {'user_id': 212, 'name': 'Tommy'} result = db.profiles.insert_one

1.4K20

数据库大批量 SQL 插入性能优化

02 事务中进行插入处理 把插入语句修改成: START TRANSACTION; INSERT INTO `insert_table` (`datetime`, `uid`, `content`,...内部会建立一个事务,事务内才进行真正插入处理操作。...通过使用事务可以减少创建事务的消耗,所有插入都在执行后才进行提交操作。 这里也提供了测试对比,分别是不使用事务与使用事务在记录数为 1 百、1 千、1 万的情况。 ?...我们可以参照 InnoDB 使用的 B+tree 索引,如果每次插入记录都在索引的最后面,索引的定位效率很高,并且对索引调整较小;如果插入的记录在索引中间,需要 B+tree 进行分裂合并等处理,会消耗比较多计算资源...注意事项: SQL语句是有长度限制,进行数据合并在同一 SQL 中务必不能超过 SQL 长度限制,通过maxallowedpacket 配置可以修改,默认是 1 M,测试时修改为 8 M。

2.1K10

MySQL存储引擎memory和merge介绍

一. memory存储引擎   memoery存储引擎是在内存中创建表,每个memory表只实际对应一个磁盘文件格式是.frm. ...GROUP BY city_id -- 给momory 表创建索引时,可以指定是hash索引还是btree索引 CREATE INDEX mem_hash USING HASH ON tab_memory...CREATE INDEX mem_hash USING BTREE ON tab_memory(city_id) SHOW INDEX FROM tab_memory   总结:服务器需要足够的内存维护所有同一时间使用的...每个memory表放置的数据量大小,受到max_heap_table_size系统变量的约束,初始值是16MB. 通过max_rows 子句指定表的最大行数。   ...对于merge类型表的插入操作有三种类型:first是插入第一个表,last是插入到最后一个表,不定义或为NO表示不能对merge表执行插入操作,对于merge表的drop操作,内部的表没有任何影响。

1K20

Python报表自动化

这样计算分成贷款金额时就只需要将新表的贷款金额及合并成一列的分成比例进行相乘。得出每个分成比例对于的分成贷款金额,最后将分成贷款金额按照单位及用途进行数据透视。...通过指定导入例的方法将与计算无关的“协议编号”,“贷款余额”,“固定利率”,“合同到期日”去除。...3.2日期筛选 个人贷款信息表包含该银行所有的历史数据,而我们每日的报表只需要统计当年的投放情况。所以计算投放金额前,我们需要将合同生效日期不符合要求的贷款记录排除掉。...这里我们通过判断日期是否为2019年(大于2018-12-31)返回TRUE/FALSE进行选择判断。这种利用判断条件选择数据的方式叫布尔索引。...这里就不多做演示了,请读者们自己动起手。模型建立好以后,我们只需要将最新的个人贷款客户信息表放置E盘,覆盖旧的数据文件。

4K41

python 内建模块_simulink常用模块

) 对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。...namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。...这样一,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性引用,使用十分方便。...namedtuple(‘名称’, [属性list]) deque:使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。...如果希望key不存在时,返回一个默认值,就可以用defaultdict 注意默认值是调用函数返回的,而函数创建defaultdict对象时传入。

78620

StarRocks学习-初识

由于一张表被切分成了多个Tablet,StarRocks执行SQL语句时,可以对所有Tablet实现并发处理,从而充分的利用多机、多核提供的计算能力。...此外,由于每个表可以有不同的表数据切分方式,根据每个表数据量的不同,切分成的Tablet数也可以不同。这样就能够实现在一个大规模集群内,对于不同的表使用不同的资源进行服务。...每个逻辑blockshortkey index表中存储一项索引, 内容为表的维度列的前缀, 并且不超过36字节.  ...分区分桶:  事实上StarRocks的表被划分成tablet, 每个tablet多副本冗余存储BE上, BE和tablet的数量可以根据计算资源和数据规模而弹性伸缩....列级别的索引技术:  Bloomfilter可快速判断数据块中不含所查找值, ZoneMap通过数据范围快速过滤待查找值, Bitmap索引可快速计算出枚举类型的列满足一定条件的行。

2K30

分表分库(百亿级大数据存储)

整个系列教程会大量结合示例代码和运行日志进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。...例程遍历了今年的365天,连接字符串指定的timeData目录下,生成了12个月份数据库,然后每个库里面按月生成数据表,每张表插入1000行模拟数据。...只能在多张表上各自查询,如果系统设计不合理,甚至可能需要在所有表上进行查询。 不建议做视图union,那样会无穷无尽,业务逻辑还是放在代码中为好,数据库做好存储与基础计算。...仍然是通过设置 Meta.ConnName/Meta.TableName 实现分表分库。日志输出可以看到查找了哪个库哪张表。...分区除了能建立子索引外,还可以建立全局索引,而分表不能建立全局索引; 分区能跨区查询,但非常非常慢,一不小心就扫描所有分区; 分表架构,很容易做成分库,支持轻易扩展到多台服务器上去,分区只能要求数据库服务器更强更大

1.1K30

NumPy 秘籍中文第二版:十一、最新最强的 NumPy

2012 年撰写了第一版,并使用了当时可用的功能。 NumPy 具有许多功能,因此您不能期望涵盖所有功能,但是我本章中介绍的功能相对重要。...Jackknife 重采样的想法是通过每次都遗漏一个值从原始数据创建数据集。 本质上,我们试图估计如果至少一个值不正确会发生什么。 对于每个新数据集,我们都会重新计算我们感兴趣的统计估计量。...通过将其设置为 NaN(非数字),我们将跳过每个数组元素一次。...(a), 3)) 遍历数组并通过循环的每次迭代中将一个值设置为 NaN 创建新的数据集。...我们通过从碗中随机抽取数字创建新样本。 取一个数字后,我们将其放回碗中。 对于每个生成的样本,我们计算感兴趣的统计估计量(例如,算术平均值)。

84910

python之列表、元组、字典

通过索引,对列表某个索引值进行修改 ? 查 查看列表中某元素出现的次数 count ? 查看某元素第一次出现的位置 ? 删 删除列表中的指定元素,只删除第一次出现的元素 ?...删除列表中指定索引的值 ? 删除列表对象,可以del 后面加上切片 ? 7 排序和反转 1.sort() ? 反转 ?...二 字典(关联数组、散列表) 1 字典创建 1 赋值创建字典 ? 2 通过工厂函数创建字典 注: 可迭代对象的元素必须是二元数组 ? ?...枚举类型: 其本身并没有数据类型,需要通过外部封装实现其数据类型 ? ? 3 通过字典的fromkeys 方法创建字典,所有元素有一个默认值 ? ? ?...3 通过模块创建默认字典 ? 2 分析字典的特性 字典不能索引和切片,因为字典是无序的数据类型 字典不支持重复和链接 字典支持成员操作符: 判断字典的key值是否存在于字典中 ?

2.8K10

MySQL数据类型与优化

但在MySQL4.1 以及更早版本只能使用"浮点运算"实现DECIMAL的计算,这样可能会导致精度损失。...因为CPU不支持对DECIMAL的直接计算MySQL5.0及更高版本中,MySQL服务器自身实现了DECIMAL的高精度计算。相对而言,CPU直接支持原生的浮点运算,所有浮点运算明显更快。...这招对内存中创建大临时表和文件排序,以及存盘上创建大临时表和文件排序这两种情况都很有帮助。 6、MySQL不能将BLOB和TEXT列全部长度的字符串进行索引,也不能使用这些索引消除排序。...绕过这种限制的方式是按照需要的顺序定义枚举列,另外也可以查询中使用FIELD()函数显式地指定排序顺序,但这会导致MySQL无法利用索引消除排序,如果定义时候就是按照字母顺序,就没有那么做的必要了。...这些函数生成的新值会任意分布很大的空间内,这会导致INSERT以及一些SELECT语句变得很慢。因为新插入的值会随机写索引到不同的位置,所以使得INSERT语句很慢。

1.5K10

MySQL排序规则导致无法命中索引问题

项中,体现了数据表中已有可以命中的索引: 但在key项中,却没有展示执行过程中命中的索引,而是扫描了全表,Extra信息中,出现了Range checked for each record (index...对于前面表中的每个行组合,MySQL 检查是否可以使用范围索引合并访问方法检索行。这不是很快,但比执行完全没有索引的连接要快。...适用性标准如第 8.2.1.2 节“范围优化”和第 8.2.1.3 节“索引合并优化”中所述,不同之处在于上表的所有列值都是已知的并被视为常量。...原因 SQL的关联条件中,关联字段类型相同,并不是隐式类型转换问题导致无法命中索引,那么我们开始排查两表的字符集、排序规则是否一致。...To compare the operands as DATETIME values, use CAST() to explicitly convert the subquery value to DATETIME

21930

SQL Server 深入解析索引存储(上)

KEY IDENTITY(1,1), NAME CHAR(80)NOT NULL, IDATE DATETIME NOT NULL DEFAULT(GETDATE()) ); GO ---插入1000...,包括IAM分页,数据分页,所有存在的LOB分页和行溢出页,索引分页 -1: 显示所有IAM、数据分页、及指定对象上全部索引索引分页. -2: 显示指定对象的所有IAM分页 0:显示所有IAM、数据分页...还可以通过另一种方法测试: select so.name, so.object_id, sp.index_id, internals.total_pages, internals.used_pages...,下面的这种计算方法是2524-2513-1(IAM页)=10,其中807页是root_page页它在第二级,其它的是中间级索引页页就是第一级;页可以通过下面的16进制计算出来,IAM=5*16=80,...(MAX) NOT NULL, IDATE DATETIME NOT NULL DEFAULT(GETDATE()) ); GO ---插入1000条测试数据 DECLARE @ID INT=1 WHILE

1K130

MySQL-索引优化篇(2)_使用索引扫描优化排序

---- 使用索引扫描优化排序 存储引擎: Innodb 重点: 优化排序 手段:利用索引 两个思路: 1 通过排序操作 、 2 按照索引顺序扫描数据 ---- 索引的列顺序和Order By子句的顺序完全一致...如果order by 都使用升序的 using index condition:5.6加入 ,会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行...使用order by关键字的时候,如果待排序的内容不能由所使用的索引直接完成排序的话,那么MySQL有可能就要进行“文件排序” 【其实并不是从文件中查找排序,不要误解】。...---- 看下索引情况 ? 最左侧的索引 rental_date 使用范围查询 验证下 ?...结论: 如果查询中有某个列的范围查询,则其右边所有列都无法使用索引 ---- order by中的字段全部关联表中的第一张表中

58470

MySQL字段的时间类型该如何选择?千万数据下性能提升10%~30%🚀

千万数据下性能提升10%~30%MySQL中时间类型的选择有很多,比如:date、time、year、datetime、timestamp...某些情况下还会使用整形int、bigint存储时间戳根据节省空间的原则...,当只需要存储年份、日期、时间时,可以使用year、date、time如果需要详细的时间,可以选择datetime、timestamp或者使用整形存储时间戳以下是不同类型的格式、时间范围、占用空间相关信息类型...,只是存储、读取会将时间戳转换为当前时区的时间其实我们还可以通过整形自己进行存储,比如使用int直接存储时间戳但由于int整形只有4B(时间范围有限),未来可能无法进行存储时间,就需要其他方案解决为了避免空间太小...timestamp、bigint的性能,我们需要先搭建环境案例只测试innodb存储引擎有索引的情况,想测试其他情况的同学,可以使用以下脚本函数自由测试首先拿出一个快过期的云服务器,然后服务器上启动MySQL...like 'log_bin_trust%';创建表,表中数据类型为bigint、datetime、timestamp进行测试(先不要创建索引,因为生成的时间是随机无序的,维护索引的开销会很大,等数据跑完后续再生成索引

25822

Python快速学习第一天

(seq) 列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) list.index(obj) 从列表中找出某个值第一个匹配项的索引位置,索引从0开始 list.insert(index...两者之间的区别在于:字典当中的元素是通过存取的,而不是通过偏移存取。 字典由键和对应的值组成。字典也被称作关联数组或哈希表。...= {'abc': 123, 98.6: 37 }; 每个键与值必须用冒号隔开(:),每对用逗号分割,整体放在花括号中({})。...radiansdict.clear() 删除字典内所有元素 radiansdict.copy() 返回一个字典的浅复制 radiansdict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键...) 如果键字典dict里返回true,否则返回false radiansdict.items() 以列表返回可遍历的(键, 值) 元组数组 radiansdict.keys() 以列表返回一个字典所有的键

3.7K50
领券