一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して6日目です。クリックしてイベントの詳細をご覧ください。
1.MySQLフィールドの自動インクリメント
MySQLデータベースを使用する場合、列の整数を順番にインクリメントする必要がある場合。MySQLの自動インクリメント列を使用できます。この列の値は、MySQLサーバーによって自動的に生成され、昇順の正の整数のシーケンスです。自動インクリメント列を使用して、テーブル内の新しい行の一意の識別子を生成できます。自動インクリメント列の機能:
- 自動インクリメント列はすべてのデータ型を使用できるわけではなく、整数または浮動小数点型にのみ適用されます。これには、、、、、、、、、、
TINYINT
が含まれます。文字タイプは適用されませんSMALLINT
INT
MEDIUMINT
BIGINT
DECIMAL
FLOAT
DOUBLE
- 自動インクリメントは主キーまたは一意キーである必要があり、各テーブルに含めることができる自動インクリメント列は1つだけです。(主に分散IDジェネレーターの主キーに使用される場合)
- 自動インクリメントの初期値は1です。
2.自己インクリメントIDを分散IDジェネレーターとして使用する方法
MySQLデータに基づくAUTO_INCREMENT
自己は、分散IDジェネレーターとして機能できます。具体的な実装は次のとおりです。
IDを生成するための別のテーブルを作成します。テーブルは次のとおりです。
CREATE TABLE `distributed_id_generator` (
`id` bigint NOT NULL AUTO_INCREMENT,
`desc` varchar(255) NULL DEFAULT '' COMMENT '说明',
PRIMARY KEY (`id`)
);
复制代码
データがテーブルに挿入されるたびに、データによって返されるIDが取得されます。これは、グローバルに一意のIDです。
ヒント:ID生成の同時実行性の保証はMySQLによって保証されています
3.mysqlに基づく実装
@Service
public class DistributedIdGeneratorService {
@Autowired
private DistributedIdGeneratorDao dao;
public long generatorId() {
DistributedIdGeneratorEntity entity = new DistributedIdGeneratorEntity();
dao.insertDistributedIdGenerator(entity);
return entity.getId();
}
}
public interface DistributedIdGeneratorDao {
Long insertDistributedIdGenerator(@Param("entity") DistributedIdGeneratorEntity entity);
}
复制代码
mybatisのxmlファイル:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.github.mxsm.mysql.dao.DistributedIdGeneratorDao">
<insert id="insertDistributedIdGenerator" keyProperty="id" useGeneratedKeys="true" parameterType="com.github.mxsm.mysql.entity.DistributedIdGeneratorEntity">
insert into distributed_id_generator (remark) values (#{entity.remark})
</insert>
</mapper>
复制代码
これで実装は完了です。
ヒント:コードアドレスgithub.com/mxsm/distri…
4.長所と短所
アドバンテージ:
- 実装はシンプルで、主にMySQLによって実装されます
- 開発者が自分で同時実行制御を実装する必要はありません。MySQLは、生成されたIDの一意性を確保するための同時実行制御を提供します。
欠点:
- 同時実行性はMySQLデータベースに依存しており、同時実行性を向上させるためにMySQLデータベースをクラスターにデプロイすることはできません。
- 一定期間使用すると、IDを生成するテーブル内のデータが増加し、テーブル内のデータが一定のレベルに達するとパフォーマンスに影響します。IDジェネレーターとして使用されるテーブルをサブデータベースサブテーブルにすることはできません
- MySQLデータベースが使用できなくなると、IDジェネレーター全体が機能しなくなります。したがって、データベースの安全な操作を保証することが、このスキーム(マスター/スレーブモード)を使用するための鍵となります。
ヒント:データベース内のテーブルデータが多すぎる場合は、スケジュールされたタスクを使用してデータをクリーンアップできます
5.まとめ
MySQLAUTO_INCREMENT
をて分散IDジェネレーターを実装する場合、パフォーマンスのボトルネックは主にMySQLにあります。この方法は、同時実行要件が高くない場合に使用できます。MySQLデータベースが正しく機能することを確認する必要があるだけです(マスタースレーブモードなど)。
私は象を運ぶアリです。記事はあなたに役立ちます。いいねしてフォローしてください。記事が間違っている場合はコメントを残してください〜ありがとう