|
8月前
|
SQL 关系型数据库 MySQL
|

MySQL并发事务是怎么处理的?

这篇内容探讨了数据库并发事务处理,特别是MySQL中的策略。文章指出并发编程常面临安全性和一致性的挑战,Java使用synchronized和Lock等机制,而MySQL通过事务隔离和MVCC(多版本并发控制)来解决。MVCC允许读事务无需等待写事务,通过保存数据的多个版本来避免冲突,提高并发性能。文章还分析了并发事务的三种情况,并解释了MVCC如何通过Read View选择可见数据版本。最后总结了事务隔离级别对并发处理的影响以及MVCC的关键作用。

121 1
|
8月前
|
存储 缓存 测试技术
|

现代化实时数仓 SelectDB 再次登顶 ClickBench 全球数据库分析性能排行榜!

近日,在 ClickHouse 发起的分析型数据库性能测试排行榜 ClickBench(https://benchmark.clickhouse.com/)中,现代化实时数仓 SelectDB 时隔两年后再次登顶,在全部近百款数据库和数十种机型中,性能表现位居总榜第一!

246 1
来自: 数据仓库  版块
|
8月前
|
SQL 存储 JSON
|

StarRocks进阶

【6月更文挑战第1天】StarRocks支持四种表类型:明细表、聚合表、更新表(正被主键表取代)和主键表。建表后类型不可修改,排序键需先于其他列定义,不支持BITMAP和HLL类型。主键表具有唯一非空约束的主键,适合实时更新和高效查询。明细表用于追加新数据,不支持修改。聚合表用于聚合统计,排序键需唯一。表引擎默认为OLAP,也可连接到外部数据源如MySQL、Hive等。数据类型包括数值、字符串、日期和半结构化类型如JSON。此外,还支持多种函数、DDL操作和HTTP SQL API。

541 0
|
8月前
|
Oracle 关系型数据库 分布式数据库
|

PolarDB助力欧派家居核心系统去O上云,每秒处理万次事务

欧派家居选择阿里云PolarDB-PG数据库,因其顺应云趋势,提供稳定服务,提升扩容和运维效率。欧派运维负责人表示,PolarDB-PG云上运行优于自建Oracle,云运维响应更快,解决问题效率更高。

53080 21
来自: 关系型数据库  版块
|
8月前
|
程序员 数据库 微服务
|

长事务管理不再难:Saga模式全面解析

本文介绍了分布式事务中的Saga模式,它用于解决微服务架构下的事务管理问题。Saga通过一系列本地事务和补偿操作确保最终一致性,分为编排和协同两种模式。文章重点讲解了编排模式,其中 Saga 协调者负责事务的执行和失败后的补偿。Saga 模式适用于业务流程明确且需要严格补偿的场景,能有效管理长事务,但实现上可能增加复杂性,并存在一致性延迟。文章还讨论了其优缺点和适用场景,强调了在面对分布式事务挑战时,Saga 模式的价值和潜力。

735 6
来自: 数据库管理工具  版块
|
8月前
|
缓存 NoSQL 中间件
|

应对数据库不断膨胀的数据:缓存和队列中间件

【6月更文挑战第5天】该文探讨了优化数据库使用以提升应用系统性能的策略。文中建议利用Redis缓存和MQ消息队列作为辅助工具,以进一步优化性能和减少资源消耗。

287 2
|
8月前
|
关系型数据库 MySQL 数据库
|

数据库读写分离后的数据同步方式

【6月更文挑战第5天】该文介绍了应对大并发请求的数据库解决方案,主要涉及MySQL的主从同步和读写分离。根据业务对数据一致性和延迟的容忍度选择合适模式,读写分离则能进一步优化数据库负载。

248 3
|
8月前
|
消息中间件 数据库
|

TCC(Try-Confirm-Cancel)

【6月更文挑战第5天】

329 3
|
8月前
|
Ubuntu Shell
|

蓝易云 - ubuntu修改默认文件权限umask

以上就是在Ubuntu中修改默认文件权限umask的方法。

142 0
|
8月前
|
JSON API 数据库
|

Flask 实战:实现增改及分页查询的完整 Demo

使用 Flask 搭建的 RESTful API Demo,包含增、改用户信息和分页查询功能。利用 Flask-SQLAlchemy 处理数据库操作。环境准备:安装 Flask 和 Flask-SQLAlchemy。核心代码展示用户模型、增加用户、分页查询和更新用户信息的路由。注意点包括数据库配置、错误处理、JSON 数据处理、幂等性、安全性和编码问题。提供完整源码下载链接。

707 2
来自: 关系型数据库  版块
|
8月前
|
API 数据库 数据库管理
|

Flask Web开发基础:数据库与ORM实战

该文介绍了如何使用 Flask、SQLAlchemy 和 SQLite 实现数据库操作。首先,通过创建虚拟环境和安装 flask-sqlalchemy(版本2.5.1)及 sqlalchemy(版本1.4.47)来设置环境。接着,配置数据库URI,定义User和Movie模型类表示数据库表,并通过db.create_all()创建表。文章还展示了如何插入、查询、更新和删除记录,强调了db.session.commit()在保存更改中的关键作用。查询涉及filter、order_by等方法,提供了一系列示例。

365 1
来自: 关系型数据库  版块
|
8月前
|
SQL 关系型数据库 MySQL
|

MySQL 迁移至 SQLite 问题记录

将WPF项目从MySQL迁移到SQLite以简化部署流程。涉及更换Nuget包(Microsoft.Data.Sqlite.Core或System.Data.SQLite),修改SQL语法,如主键和唯一约束的声明,以及处理数据库连接和数据类型差异。SQLite不支持MySQL的truncate语句,需用delete并清理sqlite_sequence表。还需注意逻辑操作符&&需替换为and。更多细节在文中详述。

357 0
来自: 关系型数据库  版块
|
8月前
|
运维 程序员 数据库
|

如何用TCC方案轻松实现分布式事务一致性

TCC(Try-Confirm-Cancel)是一种分布式事务解决方案,将事务拆分为尝试、确认和取消三步,确保在分布式系统中实现操作的原子性。它旨在处理分布式环境中的数据一致性问题,通过预检查和资源预留来降低失败风险。TCC方案具有高可靠性和灵活性,但也增加了系统复杂性并可能导致性能影响。它需要为每个服务实现Try、Confirm和Cancel接口,并在回滚时确保资源正确释放。虽然有挑战,TCC在复杂的分布式系统中仍被广泛应用。

380 5
|
8月前
|
存储 缓存 NoSQL
|

浅谈分布式数据库系统

【6月更文挑战第4天】该文探讨了数据库管理系统的解决方案,建议使用Redis和MQ作为缓存和中转,减轻数据库压力。分布式系统需透明处理数据位置,解决查询执行和正确性问题。了解这些底层设计有助于应对性能挑战。

285 8
|
8月前
|
Java 缓存 存储
|

Java内存模型是什么

本文介绍了Java并发编程中重要的Java内存模型(JMM),该模型基于硬件内存模型,旨在解决CPU缓存一致性与处理器重排序问题,确保多线程环境下的原子性、可见性和有序性。文章首先讲解了CPU执行过程中的高速缓存和由此引发的缓存一致性问题,以及处理器的重排序现象。接着,引入了计算机内存模型,它是处理这些问题的操作规范。随后,阐述了Java内存模型,其规定了变量存储在主存,线程有自己的工作区,通过主存实现线程间通信,从而在Java层面保证内存一致性。最后,对比了JMM和计算机内存模型的异同,强调两者作用于不同层次的内存一致性保障。

64 2
|
8月前
|
Java 数据库连接 mybatis
|

为什么Mybatis Mapper不需要实现类?

在学习Java动态代理之前,我想让大家先思考这样几个问题。 • JDK动态代理为什么不能对类进行代理? • Mybatis Mapper接口为什么不需要实现类? 如果你还不知道上述问题的答案,那么这篇文章一定能消除你心中的疑惑。

93 0
|
8月前
|
Java 数据库连接 mybatis
|

Mybatis mapper动态代理解决方案

该文介绍了Mybatis中使用Mapper接口的方式代替XML配置执行SQL。Mapper接口规范包括:namespace与接口类路径相同,select ID与接口方法名一致,parameterType和方法参数类型匹配,resultType与返回值类型一致。实现过程中,需配置Mapper.xml,编写Mapper.java接口,并在Mybatis-config.xml中设置。测试类中,通过SqlSession的getMapper方法获取接口的动态代理对象,调用方法执行SQL。

296 0
|
8月前
|
数据库 SQL 存储
|

在编制代码时优化数据库操作性能

【6月更文挑战第3天】本文介绍了代码中可使用的SQL语句优化策略,了解并应用本文介绍的这些技巧可显著提升数据库性能。

76 2
|
8月前
|
数据库 关系型数据库 索引
|

通过实例理解数据库性能优化的方向

【6月更文挑战第3天】性能优化是提升用户体验的关键,尤其是对数据库的优化。慢速数据库可能导致页面加载延迟,造成用户流失。通过组合优化,可确保数据库高效运行,支持应用程序顺畅,提供无缝用户体验。

305 0
|
8月前
|
关系型数据库 MySQL 自然语言处理
|

不引入ES,如何利用MySQL实现模糊匹配

本文介绍了实现一个公司申请审批流程的业务场景,该流程涉及商务角色申请添加公司,然后由管理员审批。为了防止添加重复的公司,管理员在审批前需检查已有公司信息。核心思路是通过分词、匹配数据库中的数据并按匹配度排序。在技术选型上,由于系统规模小,选择了使用MySQL的正则匹配功能而非引入ES,以降低复杂性。实现过程中,首先对输入的公司名称进行预处理,移除无用信息如地名等,然后使用IKAnalyzer进行分词,最后通过正则表达式在数据库中进行模糊匹配并按匹配度排序。代码示例展示了如何处理公司名称、分词和执行模糊匹配的SQL查询。

88 0
|
8月前
|
关系型数据库 MySQL SQL
|

MySQL的 where 1=1会不会影响性能?

在MySQL动态SQL中,使用`where 1=1`主要目的是简化动态条件的拼接,有人担心这可能影响性能。然而,通过官方文档和实际测试发现,由于MySQL的Constant-Folding Optimization(常量折叠优化),`where 1=1`在大多数情况下会被优化掉,对性能影响微乎其微。MyBatis提供了`<where>`标签,能更有效地处理动态SQL,避免多余的`AND`或`OR`。当MySQL版本大于等于5.7时,两者性能差异不大,选择哪种方式可根据团队规范和个人喜好。而在旧版本中,如果使用MyBatis,推荐使用`<where>`标签。

150 0
|
8月前
|

【树 - 平衡二叉树(AVL)】F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量

【树 - 平衡二叉树(AVL)】F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量

62 7
|
8月前
|
C语言 Ubuntu
|

蓝易云 - ubuntu20.04安装gcc5.4 g++5.4

以上步骤应该可以帮助你在Ubuntu 20.04上安装GCC 5.4和G++ 5.4。

654 2
|
8月前
|
SQL 关系型数据库 MySQL
|

使用mysql数据库的binlog应对故障

【6月更文挑战第1天】本文介绍`mysql的 binlog`工具用于解析MySQL的二进制日志,转换为可执行的SQL语句,主要用于数据库主从复制和增量恢复。定期备份和binlog推送能实现故障时的数据恢复。

341 9
|
8月前
|
存储 SQL 缓存
|

聊聊性能,如何合理设置索引?

【6月更文挑战第1天】本文介绍了数据库索引过多的索引会使更新表的速度变慢,增大数据库体积和维护成本。索引过多的风险包括降低增删改操作性能、增大数据库体积、增加存储压力和维护开销,以及加大SQL Server优化开销。建议的核心表索引不超过7个,普通表不超过5个,小型表不超过3个。针对索引过多的问题,文章提出需要根据实际需求进行分析并提供解决方案。

382 4
|
9月前
|
存储 运维 5G
|

基于阿里云数据库 SelectDB 内核 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案

数据是 5G 全连接工厂的核心要素,为支持全方位的数据收集、存储、分析等工作的高效进行,联通 5G 全连接工厂从典型的 Lambda 架构演进为 All in [Apache Doris](https://c.d4t.cn/vwDf8R) 的实时/离线一体化架构,并凭借 Doris 联邦查询能力打造统一查询网关,数据处理及查询链路大幅简化,为联通 5G 全连接工厂带来数据时效性、查询响应、存储成本、开发效率全方位的提升。

1023 4
来自: 数据仓库  版块
|
9月前
|
运维 Cloud Native 安全
|

2024年度CCF-阿里云瑶池科研基金正式发布

欢迎申报“CCF-阿里云瑶池科研基金”。

225 8
|
9月前
|
存储 开发工具 数据库
|

图解 Git

文件内容并没有真正存储在索引(.git/index)或者提交对象中,而是以blob的形式分别存储在数据库中(.git/objects),并用SHA-1值来校验。 索引文件用识别码列出相关的blob文件以及别的数据。对于提交来说,以树(tree)的形式存储,同样用对于的哈希值识别。树对应着工作目录中的文件夹,树中包含的 树或者blob对象对应着相应的子目录和文件。每次提交都存储下它的上一级树的识别码。 如果用detached HEAD提交,那么最后一次提交会被the reflog for HEAD引用。但是过一段时间就失效,最终被回收,与git commit --amend或者git rebas

72 0
|
9月前
|
SQL 测试技术 OLAP
|

现代化实时数仓 SelectDB 再次登顶 ClickBench 全球数据库分析性能排行榜!

现代化实时数仓 SelectDB 在时隔两年后再次完成登顶,在全部近百款数据库和数十种机型中,性能位居总榜第一!

439 1
来自: 数据仓库  版块
|
9月前
|
SQL 存储 关系型数据库
|

如何巧用索引优化SQL语句性能?

在 MySQL 中,添加合适的索引可以显著提升慢查询的速度,因为索引加快了数据检索。要优化 SQL 性能,首先需定位慢查询,可通过查看执行时间和执行计划。`EXPLAIN` 命令用于查看执行计划,分析如`type`(全表扫描最慢,索引扫描较快)、`key`(未使用索引为NULL)等字段。例如,全表扫描的查询可考虑为慢查询,并创建相应索引进行优化。此外,注意聚簇索引、索引覆盖和最左前缀原则等索引使用技巧,以提高查询效率。启用慢查询日志并设置阈值,有助于识别已运行的慢查询。

173 0
|
9月前
|
存储 安全 Java
|

为什么Netty要造FastThreadLocal?

Netty 的 FastThreadLocal 是一种高效的线程局部变量,设计用于解决标准 ThreadLocal 的性能和内存泄漏问题。FastThreadLocal 通过使用数组而非哈希表存储数据,避免了哈希冲突带来的性能损耗,查询效率达到 O(1)。此外,FastThreadLocal 提供了 remove() 方法和 FastThreadLocalRunnable 类,以防止内存泄漏,确保在执行完成后自动清理对象。相比于 ThreadLocal,FastThreadLocal 具有更高的性能和安全性。

118 1
|
9月前
|
SQL 关系型数据库 MySQL
|

MySQL in 太慢的 3 种优化方案

MySQL中的`eq_range_index_dive_limit`参数默认值为200,影响了IN查询的执行方式。当IN列表项少于这个值时,MySQL会使用扫描索引树(精确成本计算),而多于此值则使用索引统计(快速但可能不准)来分析查询成本。大量IN值可能导致性能下降。解决方案包括:1) 分批查询;2) 使用UNION ALL创建内存临时表;3) 创建实体表存储IN值并进行JOIN操作。注意,实体表需及时清理并避免反复插入删除导致性能下降。

1493 0
|
9月前
|
XML Java 调度
|

什么是时间轮?

时间轮是一种用于任务调度和时间管理的数据结构,尤其适合处理大量定时任务的场景,如网络服务器或实时系统。它由一个圆形数组构成,每个槽代表固定时间间隔,任务根据执行时间添加到相应槽。时间推进时,指针移动并执行到期任务。时间轮具有高效性和简单性,插入和删除操作接近常数时间复杂度。层级时间轮可扩展处理更大时间范围和精度。在Spring Boot中,可以使用Netty的`HashedWheelTimer`实现高效定时任务管理。

153 0
|
9月前
|
SQL 关系型数据库 MySQL
|

盘点6个SQL小技巧

这篇内容介绍了数据库查询中的各种JOIN操作,包括内联接(inner join)、左外联接(left outer join)、右外联接(right outer join)和全联接(full outer join)。其中,LEFT JOIN可以用于替换NOT EXISTS和NOT IN的查询。接着,文章展示了如何查询每个类别中的最高分记录,以及如何利用GROUP BY和LIMIT获取每个类别中的前N个记录。此外,还提到了MySQL 8引入的新语法LATERAL JOIN,用于更方便地处理这类问题。最后,文章提到了如何高效地统计不同时间范围内的数据量以及对比两个表之间的数据差异。

111 2
|
9月前
|
Ubuntu
|

蓝易云 - ubuntu下自启动设置,为了开机自启动launch文件

完成以上步骤后,每次开机时,Ubuntu系统就会自动启动你指定的launch文件了。

194 0
|
9月前
|
缓存 算法 关系型数据库
|

SQL DB - 关系型数据库是如何工作的

• 绿:O(1)或者叫常数阶复杂度,保持为常数(要不人家就不会叫常数阶复杂度了)。 • 红:O(log(n))对数阶复杂度,即使在十亿级数据量时也很低。 • 粉:最糟糕的复杂度是 O(n^2),平方阶复杂度,运算数快速膨胀。 • 黑和蓝:另外两种复杂度(的运算数也是)快速增长。 如果要处理2000条元素: • O(1) 算法会消耗 1 次运算 • O(log(n)) 算法会消耗 7 次运算 • O(n) 算法会消耗 2000 次运算

56 1
|
9月前
|
存储 SQL 关系型数据库
|

StarRocks简介

【5月更文挑战第4天】StarRocks是Linux基金会的开源MPP数据库,提供MySQL协议兼容性,支持标准SQL,用于快速数据分析。它适用于OLAP、实时数仓、高并发查询等场景,具有无外部依赖、高可用和易运维的特点。StarRocks支持多种BI工具,如Tableau,且可构建各种数据模型。其系统架构包括Frontend(FE)和Backend(BE),提供存算一体和存算分离两种模式。此外,StarRocks支持四种表类型和多种数据类型,满足不同业务需求。

1205 0
来自: 关系型数据库  版块
|
9月前
|
SQL 程序员
|

sql中的distinct用法

`DISTINCT`在SQL中用于返回唯一不同的值,消除结果集中的重复行。基本用法包括:1) 选择单列唯一值,如`SELECT DISTINCT department FROM employees;`

415 0
|
9月前
|
应用服务中间件 Linux nginx
|

蓝易云 - linux查看正在运行的nginx在哪个文件夹当中

请注意,这些步骤可能需要root权限才能执行。如果你没有root权限,你可能需要使用 `sudo`命令。

189 0
|
9月前
|
SQL 运维 关系型数据库
|

阿里云DTS踩坑经验分享系列|数据不一致修复大法

阿里云数据传输服务DTS在帮助用户迁移数据、同步数据时,在某些复杂场景下会出现源库与目标库数据不一致的问题,造成数据错误,给用户带来困扰。由于数据不一致的问题很难完全避免,为了及时修复不一致的数据,DTS产品推出数据订正功能,保障用户在同步\迁移数据时的数据一致性。本文介绍了产生数据不一致的一些典型场景,并重点阐述了如何使用DTS数据订正功能来修复不一致的数据。

702 4
来自: 数据库管理工具  版块
|
9月前
|
关系型数据库 Serverless 分布式数据库
|

ICDE’24|中国企业首获最佳论文,详解PolarDB Serverless如何在0.5秒内实现跨机迁移

PolarDB Serverless如何在0.5秒内实现跨机迁移?

55405 28
来自: 关系型数据库  版块
|
9月前
|
存储 关系型数据库 MySQL
|

AnalyticDB MySQL新购页面融合升级,提供企业版购买选项

AnalyticDB MySQL新购页面升级,现推出企业版和基础版,不再区分湖仓版和数仓版。企业版(集群模式)和基础版(单机模式)融合了弹性模式和预留模式的功能,提供资源隔离、弹性扩展及高性能查询,适合开发测试和生产环境,而基础版适用于小规模测试,不推荐用于生产环境。

422 0
来自: 数据仓库  版块
|
9月前
|
缓存 算法 安全
|

被追着问UUID和自增ID做主键哪个好,为什么?

讨论了UUID和自增ID作为数据库主键的优缺点。UUID全局唯一,适合分布式系统,但存储空间大,不适合范围查询。自增ID存储空间节省,查询效率高,但分库分表困难,可预测性高。UUID版本包括基于时间戳(V1)、随机数(V4)以及基于名称空间的MD5(V3)和SHA1(V5)散列。

546 1
|
9月前
|
SQL 关系型数据库 MySQL
|

sql怎么创建数据库表,SQL(Struct

SQL是管理关系型数据库的标准语言,用于创建、维护和查询数据库表。创建表的基本步骤包括:选择数据库(如MySQL等),使用CREATE TABLE语句定义表结构,指定字段属性和数据类型,设置约束(如主键、唯一键),创建索引以提升查询性能,最后以分号结束语句完成创建。此外,还可使用ALTER TABLE修改表,DROP TABLE删除表,以及其他SQL语句进行查询、插入、更新和删除操作,有效管理数据库。

80 3
|
9月前
|
XML Java Maven
|

如何将MultipartFile转换为File

该文介绍了MultipartFile(Spring框架)与File(Java标准库)的区别,主要讨论了如何将MultipartFile转换为File的三种方法:使用`transferTo`、`FileOutputStream`和Java NIO,并提到了File转MultipartFile常用于测试,可通过MockMultipartFile实现。

370 0
|
9月前
|
人工智能 NoSQL atlas
|

MongoDB白皮书|应用程序驱动型智能:定义下一代成功的现代应用程序

MongoDB Atlas 开发者数据平台旨在帮助这两个团队“乘风破浪”,从而打造更快、更智能的应用和自动化业务流程,能够更快地对快速变化的操作数据做出反应和响应。

3282 0
|
9月前
|
JavaScript Java Spring
|

@Async异步失效的9种场景

在Spring中,启用@Async异步功能需要在启动类或配置类上使用`@EnableAsync`。若未使用此注解,@Async将无效。另外,内部方法调用(如在一个类的方法中调用另一个被@Async注解的方法)会导致异步功能失效,因为这不涉及Spring的AOP代理。此外,@Async方法必须是public,返回类型为void或Future,不能是static或final,且其所在的类需被@Service等注解以使Spring管理。如果使用@ComponentScan,确保正确扫描包含@Async类的包路径。

127 1
|
9月前
|
JSON JavaScript Java
|

SpringBoot读取配置优先级顺序是什么?

Spring Boot的外部配置加载优先级是开发者理解和管理应用程序配置的关键。它支持多种配置源,包括Java属性文件、YAML文件、环境变量、命令行参数等。配置加载顺序从低到高为:默认属性、@PropertySource加载的配置、Config Data(内部配置文件、外部配置文件)、环境变量、系统属性、Servlet容器初始化参数、SPRING_APPLICATION_JSON格式的环境变量或系统属性以及命令行参数。了解这一顺序有助于在不同环境中灵活配置和管理Spring Boot应用,确保其按预期运行。

150 0
|
9月前
|
人工智能 NoSQL atlas
|

加入MongoDB AI创新者计划,为您的AI初创企业获取额外支持!

MongoDB推出AI创新者计划,针对AI初创企业和各规模企业,提供专属福利和Atlas云数据库额外额度。AI初创者计划适合早期企业,包括联合营销机会和专业服务支持,优秀项目有望成为MongoDB Ventures。AI强化计划则针对不同企业,由MongoDB专家评估项目潜力,提供一对一技术指导、免费Atlas使用额度和在MongoDB生态中曝光的机会。符合条件的A轮或更早阶段的初创公司可申请,现有MongoDB for Startups成员也可加入并获取更多Atlas资源。扫描二维码即可申请,开启AI创新之旅。

3530 0
|
9月前
|
Java
|

什么锁比读写锁性能更高?

Java并发编程中,ReentrantReadWriteLock是高效的锁机制,但在高并发环境下,乐观锁(如CAS)和JDK 8引入的StampedLock可提供更高性能。StampedLock支持读锁、写锁和乐观读锁,其乐观读锁在读多写少的场景下能提升并发性能,通过tryOptimisticRead方法实现。当乐观读锁无效时,可无缝切换至悲观读锁。

174 1