{"id":50212,"date":"2022-12-27T00:35:02","date_gmt":"2022-11-11T03:20:18","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/"},"modified":"2024-04-29T07:06:55","modified_gmt":"2024-04-28T23:06:55","slug":"%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/","title":{"rendered":"\u4f7f\u7528Spring Boot\u548cScalar DB\u6784\u5efaAPI\u7684\u65b9\u6cd5\u2460"},"content":{"rendered":"<h1>\u592a\u957f\u4e0d\u770b<\/h1>\n<p>\u6211\u4eec\u4f7f\u7528\u7531Scalar\u682a\u5f0f\u4f1a\u793e\u5f00\u53d1\u7684\u5206\u5e03\u5f0f\u4e8b\u52a1\u7ba1\u7406\u5668Scalar DB\u6765\u521b\u5efa\u5904\u7406\u4e8b\u52a1\u7684API\u3002<\/p>\n<p>\u6211\u6253\u7b97\u89e3\u91ca\u4e00\u4e0b\u6211\u5b66\u5230\u7684Scalar DB\u7684\u7279\u70b9\u4ee5\u53ca\u4f7f\u7528Scalar DB\u5f00\u53d1API\u7684\u65b9\u6cd5\u3002<\/p>\n<p>\u7531\u4e8e\u957f\u5ea6\u8f83\u957f\uff0c\u6211\u5c06\u5206\u4e09\u6b21\u53d1\u5e03\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Spring Boot\u3068Scalar DB\u3092\u7528\u3044\u305fAPI\u306e\u4f5c\u308a\u65b9\u2460(\u672c\u8a18\u4e8b)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Spring Boot\u3068Scalar DB\u3092\u7528\u3044\u305fAPI\u306e\u4f5c\u308a\u65b9\u2461<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Spring Boot\u3068Scalar DB\u3092\u7528\u3044\u305fAPI\u306e\u4f5c\u308a\u65b9\u2462<\/ul>\n<p>\u5df2\u7ecf\u5c06\u5b8c\u6210\u7684\u9879\u76ee\u516c\u5f00\u5728 GitHub \u4e0a\u3002<\/p>\n<h1>\u7d22\u5f15<\/h1>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u4e3a\u4ec0\u4e48\u8981\u5728Spring Boot\u4e2d\u4f7f\u7528Scalar DB<\/ol>\n<\/li>\n<\/ol>\n<p>Scalar DB\u6982\u8ff0<br \/>\n\u4f7f\u7528Scalar DB\u7684\u4f18\u52bf<\/p>\n<p>Spring Boot\u4e2d\u7684API\u67b6\u6784\u53ca\u6bcf\u4e2a\u5c42\u7684\u89d2\u8272<\/p>\n<p>\u5404\u5c42\u7684\u89d2\u8272<br \/>\nScalar DB\u5728\u6bcf\u4e2a\u5c42\u7684\u5b9e\u73b0<br \/>\nAPI\u67b6\u6784<\/p>\n<p>\u793a\u4f8b\u5e94\u7528\u6982\u8ff0<\/p>\n<p>\u8981\u6c42<br \/>\n\u73af\u5883\u8bbe\u7f6e<br \/>\n\u76ee\u5f55\u7ed3\u6784<\/p>\n<p>\u6570\u636e\u6a21\u578b\u8bbe\u8ba1<br \/>\n\u7aef\u70b9\u8bbe\u8ba1<\/p>\n<p>\u5728Spring Boot\u4e2d\u5f15\u5165Scalar DB\u7684\u65b9\u6cd5<\/p>\n<p>\u5b89\u88c5\u5e93<br \/>\n\u521b\u5efa\u5c5e\u6027\u6587\u4ef6<br \/>\n\u521b\u5efa\u6a21\u5f0f\u6587\u4ef6<br \/>\n\u8bbe\u7f6e\u6570\u636e\u6a21\u5f0f<\/p>\n<h1>\u4f7f\u7528Spring Boot\u7684\u539f\u56e0\u662f\u4f7f\u7528Scalar DB\u3002<\/h1>\n<h2>Scalars DB \u7684\u6982\u8ff0<\/h2>\n<p>Scalar DB\u662f\u4e00\u4e2a\u4e8b\u52a1\u7ba1\u7406\u5668\uff0c\u5b83\u53ef\u4ee5\u4e3a\u4e0d\u7b26\u5408ACID\u6807\u51c6\u7684\u6570\u636e\u5e93\u63d0\u4f9b\u7b26\u5408ACID\u6807\u51c6\u7684\u4e8b\u52a1\u5904\u7406\u80fd\u529b\u3002<\/p>\n<p>Scalar DB\u901a\u8fc7\u5b58\u50a8\u62bd\u8c61\u5c42\u548c\u5b58\u50a8\u9002\u914d\u5668\u5bf9\u6570\u636e\u5e93\u8fdb\u884c\u62bd\u8c61\u5316\uff0c\u5982\u4e0b\u56fe\u6240\u793a\u3002\u56e0\u6b64\uff0c\u4f7f\u7528Scalar DB\u7684\u5e94\u7528\u7a0b\u5e8f\u65e0\u9700\u610f\u8bc6\u5230\u6240\u4f7f\u7528\u7684\u6570\u636e\u5e93\u7684\u5dee\u5f02\uff0c\u53ef\u4ee5\u5728\u540c\u4e00\u7a0b\u5e8f\u4e2d\u4f7f\u7528\u5404\u79cd\u4e0d\u540c\u7684\u6570\u636e\u5e93\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8ff1913a08637a6da9d2\/12-0.png\" alt=\"Scalar DB Architecture\" \/><\/div>\n<p>\u5728Scalar DB\u4e2d\uff0c\u53ef\u4ee5\u5c06\u591a\u4e2a\u4e0d\u540c\u7684\u6570\u636e\u5e93\u4f5c\u4e3a\u4e00\u4e2a\u6570\u636e\u5e93\u8fdb\u884c\u5904\u7406\u3002\u56e0\u6b64\uff0c\u53ef\u4ee5\u4f7f\u7528\u540c\u4e00\u4e2a\u7a0b\u5e8f\u5bf9\u591a\u4e2a\u4e0d\u540c\u7684\u6570\u636e\u5e93\u8fdb\u884cACID\u4e8b\u52a1\u5904\u7406\u3002<br \/>\n\u76ee\u524d\u652f\u6301\u7684\u6570\u636e\u5e93\u6709Cassandra\u3001Cosmos DB\u3001DynamoDB\u3001MySQL\u548cPostgreSQL\u3002<\/p>\n<p>\u652f\u6301\u7684\u6570\u636e\u5e93<\/p>\n<p>\u8bf7\u53c2\u9605\u5b98\u65b9\u6587\u4ef6\u4ee5\u83b7\u5f97\u8be6\u7ec6\u8bf4\u660e\u3002<\/p>\n<h2>\u4f7f\u7528Scalar DB\u7684\u597d\u5904<\/h2>\n<p>\u6211\u60f3\u5728Spring Boot\u4e2d\uff0c\u5f88\u5e38\u89c1\u7684\u505a\u6cd5\u662f\u4f7f\u7528\uff20Transaction\u6ce8\u89e3\u6765\u5b9e\u73b0\u4e8b\u52a1\u5904\u7406\u3002<\/p>\n<p>\u4f7f\u7528Scalar DB\u6765\u5b9e\u73b0\u4e8b\u52a1\u6709\u4ee5\u4e0b\u597d\u5904\uff1a<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u7a2e\u985e\u306b\u304b\u304b\u308f\u3089\u305a\u3001\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5206\u96e2\u30ec\u30d9\u30eb\u3092 Strict Serializable \u306b\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u7570\u306a\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\/\u30b9\u30c8\u30ec\u30fc\u30b8\u3067\u3082\u540c\u3058\u30b3\u30fc\u30c9\u3067\u5b9f\u88c5\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u5225\u3005\u306e\u3001\u3042\u308b\u3044\u306f\u7570\u306a\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9593\u3067\u3082\u3001\u540c\u3058\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3067\u3001\u540c\u3058\u5206\u96e2\u30ec\u30d9\u30eb\u3067\u5b9f\u88c5\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3002<\/ul>\n<h3>\u65e0\u8bba\u6570\u636e\u5e93\u7c7b\u578b\u5982\u4f55\uff0c\u90fd\u53ef\u4ee5\u5c06\u4e8b\u52a1\u9694\u79bb\u7ea7\u522b\u8bbe\u7f6e\u4e3a\u4e25\u683c\u53ef\u5e8f\u5217\u5316\u3002<\/h3>\n<p>\u5982\u679c\u4f7f\u7528@Transaction\u6ce8\u89e3\u6765\u5b9e\u73b0\u4e8b\u52a1\u5904\u7406\uff0c\u4e8b\u52a1\u9694\u79bb\u7ea7\u522b\u5c06\u53d6\u51b3\u4e8e\u6240\u4f7f\u7528\u7684\u6570\u636e\u5e93\/\u5b58\u50a8\u7cfb\u7edf\u3002<\/p>\n<p>\u4e00\u65b9\uff0cScalar DB\u7684\u4e8b\u52a1\u9694\u79bb\u7ea7\u522b\u88ab\u8bbe\u7f6e\u4e3aRead Committed Snapshot Isolation\uff0c\u5e76\u4e14\u53ef\u4ee5\u8bbe\u7f6e\u6700\u9ad8\u4e3aStrict Serializable\u7684\u9694\u79bb\u7ea7\u522b\u3002\u56e0\u6b64\uff0c\u5373\u4f7f\u662f\u652f\u6301\u8303\u56f4\u6709\u9650\u7684\u6570\u636e\u5e93\u4e5f\u53ef\u4ee5\u8fdb\u884c\u9002\u914d\u3002<\/p>\n<h3>\u5728\u4e0d\u540c\u7684\u6570\u636e\u5e93 \/ \u5b58\u50a8\u7cfb\u7edf\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u76f8\u540c\u7684\u4ee3\u7801\u8fdb\u884c\u5b9e\u73b0\u3002<\/h3>\n<p>\u6b63\u5982\u4e0a\u8ff0\u6240\u8ff0\uff0cScalar DB\u5c06\u5bf9\u6570\u636e\u5e93\/\u5b58\u50a8\u7684\u8bbf\u95ee\u8fdb\u884c\u4e86\u62bd\u8c61\u5316\uff0c\u56e0\u6b64\u5e94\u7528\u7a0b\u5e8f\u65e0\u9700\u5173\u6ce8\u6570\u636e\u5e93\/\u5b58\u50a8\u7684\u7c7b\u578b\u3002\u56e0\u6b64\uff0c\u53ea\u8981Scalar DB\u652f\u6301\u7684\u6570\u636e\u5e93\/\u5b58\u50a8\uff0c\u5c31\u53ef\u4ee5\u5728\u540c\u4e00\u7a0b\u5e8f\u4e2d\u5b9e\u73b0\u3002<\/p>\n<p>\u6b64\u5916\uff0c\u60a8\u53ea\u9700\u4fee\u6539\u6240\u8ff0\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u800c\u65e0\u9700\u66f4\u6539\u4efb\u4f55\u4ee3\u7801\uff0c\u5c31\u80fd\u591f\u66f4\u6362\u6570\u636e\u5e93\/\u5b58\u50a8\u7cfb\u7edf\u3002<\/p>\n<h3>\u53ef\u4ee5\u5728\u4e0d\u540c\u7684\u6570\u636e\u5e93\u4e4b\u95f4\u4f7f\u7528\u76f8\u540c\u7684\u754c\u9762\u548c\u76f8\u540c\u7684\u9694\u79bb\u7ea7\u522b\u8fdb\u884c\u5b9e\u73b0\u3002<\/h3>\n<p>\u5728@Transaction\u6ce8\u89e3\u4e2d\uff0c\u65e0\u6cd5\u5728\u4e0d\u540c\u7684\u6570\u636e\u5e93\/\u5b58\u50a8\u4e4b\u95f4\u6267\u884cACID\u4e8b\u52a1\u3002<\/p>\n<p>\u4e00\u65b9\uff0cScalar DB\u5177\u6709\u591a\u5b58\u50a8\u4ecb\u8d28\u7684\u652f\u6301\uff0c\u53ef\u4ee5\u5728\u53d7\u5230\u4e0d\u540c\u673a\u578b\u4e4b\u95f4\u3001\u6570\u636e\u5e93\u4e4b\u95f4\u3001\u5206\u533a\u4e4b\u95f4\u548c\u8868\u4e4b\u95f4\u4e8b\u52a1\u7ea6\u675f\u7684\u73af\u5883\u4e2d\uff0c\u901a\u8fc7\u76f8\u540c\u7684\u754c\u9762\uff0c\u5728\u6700\u9ad8\u4e25\u683c\u53ef\u4e32\u884c\u5316\u9694\u79bb\u7ea7\u522b\u4e0b\u8fdb\u884c\u5b9e\u73b0\u3002<\/p>\n<p>\u203b \u53c2\u8003\uff1a<br \/>\n\u53ef\u5e8f\u5217\u5316\u7684\u5b57\u7b26\u4e32<\/p>\n<h1>\u5728Spring Boot\u4e2d\u7684API\u67b6\u6784\u548c\u6bcf\u4e2a\u5c42\u7684\u89d2\u8272<\/h1>\n<h2>\u6bcf\u4e2a\u5c42\u6b21\u7684\u89d2\u8272<\/h2>\n<p>Spring Boot\u91c7\u7528\u5206\u5c42\u67b6\u6784\uff0c\u5176\u4e2d\u5305\u542b\u4ee5\u4e0b\u56db\u4e2a\u5c42\uff0c\u6bcf\u4e2a\u5c42\u4e0e\u5176\u4e0b\u65b9\u6216\u4e0a\u65b9\u7684\u5c42\u8fdb\u884c\u901a\u4fe1\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8ff1913a08637a6da9d2\/33-0.png\" alt=\"Spring Boot Layer\" \/><\/div>\n<h3>\u5c55\u793a\u5c42<\/h3>\n<p>\u6f14\u793a\u5c42\u7531\u63a7\u5236\u5668\u7c7b\u6784\u6210\uff0c\u8d1f\u8d23\u5904\u7406HTTP\u8bf7\u6c42\uff0c\u5e76\u5c06JSON\u53c2\u6570\u8f6c\u6362\u4e3a\u5bf9\u8c61\uff0c\u7136\u540e\u5c06\u8bf7\u6c42\u6388\u6743\u5e76\u8f6c\u53d1\u5230\u4e1a\u52a1\u5c42\u3002<\/p>\n<h3>\u5546\u4e1a\u5c42<\/h3>\n<p>\u4e1a\u52a1\u5c42\u8d1f\u8d23\u5904\u7406\u4e1a\u52a1\u903b\u8f91\u3002\u5b83\u7531\u670d\u52a1\u7c7b\u6784\u6210\uff0c\u5904\u7406\u6765\u81ea\u8868\u793a\u5c42\u7684\u6570\u636e\uff0c\u8f6c\u53d1\u5230\u6301\u4e45\u5c42\uff0c\u5e76\u5c06\u7ed3\u679c\u8fd4\u56de\u7ed9\u8868\u793a\u5c42\u3002\u6b64\u5916\uff0c\u8fd8\u4f1a\u5904\u7406\u8ba4\u8bc1\u548c\u9a8c\u8bc1\u7684\u4efb\u52a1\u3002<\/p>\n<h3>\u6301\u4e45\u5c42<\/h3>\n<p>\u6301\u4e45\u5c42\u7531Repository\u7c7b\u6784\u6210\uff0c\u8d1f\u8d23\u4e0e\u6570\u636e\u5e93\u8fdb\u884c\u8fde\u63a5\uff0c\u5e76\u5904\u7406\u4ece\u4e1a\u52a1\u5c42\u4f20\u9012\u8fc7\u6765\u7684\u6570\u636e\u7684CRUD\u64cd\u4f5c\u8bf7\u6c42\uff0c\u5e76\u5c06\u7ed3\u679c\u8fd4\u56de\u7ed9\u4e1a\u52a1\u5c42\u3002<\/p>\n<h3>\u6570\u636e\u5e93\u5c42<\/h3>\n<p>\u6570\u636e\u5e93\u5c42\u4f1a\u5bf9\u4ece\u6301\u4e45\u5316\u5c42\u4f20\u8f93\u7684\u6570\u636e\u548c\u8bf7\u6c42\u6267\u884cCRUD\u64cd\u4f5c\u3002<\/p>\n<h2>\u5728Scalar DB\u7684\u6bcf\u4e2a\u5c42\u6b21\u4e0a\u7684\u5b9e\u73b0\u3002<\/h2>\n<p>Scalar DB\u4f1a\u5c06\u5728Persistence Layer\u4e2d\u7f16\u5199\u7684\u64cd\u4f5c\u4f5c\u4e3a\u4e00\u7cfb\u5217\u64cd\u4f5c\u5728Business Layer\u4e2d\u6267\u884c\uff0c\u5e76\u5c06\u5176\u4f5c\u4e3a\u4e8b\u52a1\u4e00\u8d77\u6267\u884c\u3002<br \/>\n&#8211; \u5728Persistence Layer\u4e2d\uff0c\u4f7f\u7528Scalar DB\u7684\u65b9\u6cd5\u6765\u7f16\u5199\u5bf9\u6570\u636e\u5e93\u8868\u7684CRUD\u64cd\u4f5c\u3002<br \/>\n&#8211; \u5728Business Layer\u4e2d\uff0c\u4f7f\u7528Scalar DB\u7684\u65b9\u6cd5\u6765\u7f16\u5199\u4e8b\u52a1\u5904\u7406\u3002<\/p>\n<h2>API\u67b6\u6784<\/h2>\n<p>\u57fa\u4e8e\u4ee5\u4e0a\u8003\u8651\uff0cSpring Boot\u4e2d\u7684API\u67b6\u6784\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8ff1913a08637a6da9d2\/46-0.png\" alt=\"Spring_Boot_API_Architecture\" \/><\/div>\n<p>DTO\u4fdd\u5b58\u6709\u4eceHTTP\u8bf7\u6c42\u4f20\u8f93\u6216\u8fd4\u56de\u6570\u636e\u7684\u529f\u80fd\u3002Model\u4fdd\u5b58\u7528\u4e8e\u6c38\u4e45\u5b58\u50a8\u5230\u6570\u636e\u5e93\u7684\u6570\u636e\u3002\u5728Mapper\u4e2d\u5c06DTO\u548cModel\u7684\u6570\u636e\u8fdb\u884c\u6620\u5c04\uff0c\u7136\u540e\u5c06\u6570\u636e\u4f20\u9012\u7ed9Controller\u7c7b\u3001Service\u7c7b\u548cRepository\u7c7b\u3002<\/p>\n<h1>\u793a\u4f8b\u5e94\u7528\u7a0b\u5e8f\u7684\u6982\u8ff0<\/h1>\n<p>\u7528\u6237\u4f1a\u4fdd\u5b58\u6240\u5c5e\u7684\u7fa4\u7ec4\u4fe1\u606f\uff0c\u5e76\u4e14\u7fa4\u7ec4\u4f1a\u4fdd\u5b58\u5c5e\u4e8e\u8be5\u7fa4\u7ec4\u7684\u7528\u6237\u4fe1\u606f\u3002<br \/>\n\u56e0\u6b64\uff0c\u5982\u679c\u8981\u66f4\u6539\u7528\u6237\u6240\u5c5e\u7684\u7fa4\u7ec4\uff0c\u9700\u8981\u540c\u65f6\u66f4\u65b0\u7528\u6237\u548c\u7fa4\u7ec4\u7684\u4fe1\u606f\u3002<\/p>\n<p>\u4e00\u822c\u800c\u8a00\uff0c\u4f7f\u7528NoSQL\u6570\u636e\u5e93\u7684\u5b9e\u73b0\u901a\u5e38\u4e0d\u8fdb\u884c\u7b2c\u4e09\u8303\u5f0f\u5316\uff0c\u56e0\u6b64\u5728\u7528\u6237\u548c\u7fa4\u7ec4\u4e24\u65b9\u9762\u90fd\u4fdd\u7559\u4fe1\u606f\uff0c\u5e76\u5b9e\u73b0\u80fd\u591f\u6ee1\u8db3\u4e24\u8005\u7684\u67e5\u8be2\u9700\u6c42\u3002<\/p>\n<p>\u7528\u6237\u5177\u6709\u7ba1\u7406\u5458\u6743\u9650\u548c\u666e\u901a\u6743\u9650\uff0c\u5e76\u6839\u636e\u6240\u5c5e\u7684\u7ec4\u5206\u914d\u6743\u9650\u4ee5\u8fdb\u884c\u8bbf\u95ee\u63a7\u5236\u3002<\/p>\n<h2>\u91cd\u8981\u7684\u4e8b\u9879<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5168\u30e6\u30fc\u30b6\u30fc\u306f\u81ea\u8eab\u306e\u60c5\u5831\u3092\u767b\u9332\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u4e00\u822c\u30e6\u30fc\u30b6\u30fc\u306f\u81ea\u5206\u81ea\u8eab\u306e\u60c5\u5831\u306e\u53d6\u5f97\u3001\u66f4\u65b0\u3001\u524a\u9664\u304c\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u7ba1\u7406\u8005\u306f\u5168\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u306e\u53d6\u5f97\u3001\u66f4\u65b0\u3001\u524a\u9664\u304c\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u7ba1\u7406\u8005\u304a\u3088\u3073\u4e00\u822c\u30e6\u30fc\u30b6\u30fc\u306f\u30b0\u30eb\u30fc\u30d7\u3092\u4f5c\u6210\u3067\u304d\u308b\u3002\u4f5c\u6210\u3057\u305f\u30e6\u30fc\u30b6\u30fc\u306f\u81ea\u52d5\u7684\u306b\u305d\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u6240\u5c5e\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u4e00\u822c\u30e6\u30fc\u30b6\u30fc\u306f\u6240\u5c5e\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u306b\u5bfe\u3057\u3066\u3001\u30e1\u30f3\u30d0\u30fc\u306e\u8ffd\u52a0\u30fb\u8131\u9000\u3001\u30e1\u30f3\u30d0\u30fc\u4e00\u89a7\u306e\u53d6\u5f97\u3001\u30b0\u30eb\u30fc\u30d7\u306e\u524a\u9664\u304c\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u7ba1\u7406\u8005\u306f\u5168\u3066\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u5bfe\u3057\u3066\u30e1\u30f3\u30d0\u30fc\u306e\u8ffd\u52a0\u30fb\u8131\u9000\u3001\u30e1\u30f3\u30d0\u30fc\u4e00\u89a7\u306e\u53d6\u5f97\u3001\u30b0\u30eb\u30fc\u30d7\u306e\u524a\u9664\u304c\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u4e00\u822c\u30e6\u30fc\u30b6\u30fc\u304a\u3088\u3073\u7ba1\u7406\u8005\u306f\u5168\u3066\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u4e00\u89a7\u53d6\u5f97\u3067\u304d\u308b<\/ul>\n<h2>\u73af\u5883\u5efa\u8bbe<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Spring Boot 2.5.6<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Scalar DB 3.3.0<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Java 8<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Cassandra 3.11<\/ul>\n<h2>\u76ee\u5f55\u7ed3\u6784<\/h2>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 api\r\n|   \u251c\u2500\u2500 build.gradle\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 src\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 main\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 java\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 com\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2514\u2500\u2500 example\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0         \u2514\u2500\u2500 api\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0             \u251c\u2500\u2500 Application.java\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0             \u251c\u2500\u2500 config\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0             \u251c\u2500\u2500 controller\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0             \u251c\u2500\u2500 dto\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0             \u251c\u2500\u2500 exception\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0             \u251c\u2500\u2500 model\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0             \u251c\u2500\u2500 repository\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0             \u251c\u2500\u2500 service\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0             \u2514\u2500\u2500 util\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 resources\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2514\u2500\u2500 database.properties\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 test\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u251c\u2500\u2500 java\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2502\u00a0\u00a0 \u2514\u2500\u2500 com\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2502\u00a0\u00a0     \u2514\u2500\u2500 example\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2502\u00a0\u00a0         \u2514\u2500\u2500 api\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2502\u00a0\u00a0             \u251c\u2500\u2500 controller\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2502\u00a0\u00a0             \u251c\u2500\u2500 cucumber\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2502\u00a0\u00a0             \u251c\u2500\u2500 repository\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2502\u00a0\u00a0             \u251c\u2500\u2500 security\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2502\u00a0\u00a0             \u251c\u2500\u2500 service\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2514\u2500\u2500 resources\r\n\u2514\u2500\u2500 tools\r\n\u2502\u00a0  \u251c\u2500\u2500 scalardb-schema-loader-3.3.0.jar\r\n\u2502\u00a0    \u2514\u2500\u2500 schema\r\n\u2502\u00a0       \u2514\u2500\u2500 schema.json\r\n\u2514\u2500\u2500 docker-compose.yml\r\n\r\n<\/code><\/pre>\n<h1>\u6570\u636e\u6a21\u578b\u7684\u8bbe\u8ba1<\/h1>\n<p>\u6211\u4eec\u521b\u5efa\u7684API\u6570\u636e\u6a21\u578b\u5982\u4e0b\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8ff1913a08637a6da9d2\/60-0.png\" alt=\"data-model\" \/><\/div>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30e6\u30fc\u30b6\u30fc\u3068\u30b0\u30eb\u30fc\u30d7\u7ba1\u7406\u3092 NoSQL\u3067\u3042\u308bCassandra \u3092\u7528\u3044\u3066\u884c\u3046\u30b1\u30fc\u30b9\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">User\u30c6\u30fc\u30d6\u30eb\u306b\u306f\u3001\u3069\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u6240\u5c5e\u3057\u3066\u3044\u308b\u304b\u3068\u3044\u3046\u60c5\u5831\u3092\u4fdd\u6301\u3057\u3001Group\u30c6\u30fc\u30d6\u30eb\u306b\u306f\u3069\u306e\u3088\u3046\u306a\u30e6\u30fc\u30b6\u30fc\u304c\u6240\u5c5e\u3057\u3066\u3044\u308b\u306e\u304b\u3068\u3044\u3046\u60c5\u5831\u3092\u4fdd\u6301\u3057\u3066\u3044\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u3053\u306e\u305f\u3081\u3001\u3069\u3061\u3089\u304b\u306e\u30c6\u30fc\u30d6\u30eb\u3092\u66f4\u65b0\u3059\u308b\u969b\u306b\u306f\u3001\u53cc\u65b9\u306b\u5b58\u5728\u3059\u308b\u30ec\u30b3\u30fc\u30c9\u3092\u540c\u6642\u306b\u66f4\u65b0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/ul>\n<h1>\u7ec8\u70b9\u7684\u8bbe\u8ba1<\/h1>\n<p>\u6211\u5df2\u7ecf\u8bbe\u8ba1\u4e86\u4ee5\u4e0b\u7684\u7ec8\u7aef\u70b9\u3002<\/p>\n<div>\n<div class=\"post-table\">URIHTTP\u30e1\u30bd\u30c3\u30c9Description\/usersPOST\u30e6\u30fc\u30b6\u30fc\u3092\u767b\u9332\u3059\u308b\/usersGET\u30e6\u30fc\u30b6\u30fc\u3092\u4e00\u89a7\u53d6\u5f97\u3059\u308b\/users\/{user_id}GET\u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\/users\/{user_id}PUT\u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u3092\u66f4\u65b0\u3059\u308b\/users\/{user_id}DELETE\u30e6\u30fc\u30b6\u30fc\u3092\u524a\u9664\u3059\u308b\/groupsPOST\u30b0\u30eb\u30fc\u30d7\u3092\u767b\u9332\u3059\u308b\/groupsGET\u30b0\u30eb\u30fc\u30d7\u4e00\u89a7\u3092\u53d6\u5f97\u3059\u308b\/groups\/{group_id}\/group-usersPUT\u30b0\u30eb\u30fc\u30d7\u306b\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3059\u308b\/groups\/{group_id}\/group-usersGET\u30b0\u30eb\u30fc\u30d7\u306b\u6240\u5c5e\u3059\u308b\u30e6\u30fc\u30b6\u30fc\u3092\u4e00\u89a7\u53d6\u5f97\u3059\u308b\/groups\/{group_id}\/group-users\/{user_id}PUT\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u30e6\u30fc\u30b6\u30fc\u3092\u8131\u9000\u3055\u305b\u308b\/groups\/{group_id}DELETE\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664\u3059\u308b<\/div>\n<\/div>\n<h1>\u4f7f\u7528Spring Boot\u5f15\u5165Scalar DB\u7684\u65b9\u6cd5<\/h1>\n<p>\u901a\u8fc7\u5b89\u88c5Scalar DB\u5e93\uff0c\u5e76\u521b\u5efa\u5c5e\u6027\u6587\u4ef6\u548c\u6a21\u5f0f\u6587\u4ef6\uff0c\u518d\u4f7f\u7528\u6a21\u5f0f\u52a0\u8f7d\u5668\u5c06\u5c5e\u6027\u6587\u4ef6\u548c\u6a21\u5f0f\u6587\u4ef6\u52a0\u8f7d\u5230\u6570\u636e\u5e93\u4e2d\uff0c\u53ef\u4ee5\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u548c\u8868\u3002<\/p>\n<h3>\u5b89\u88c5\u56fe\u4e66\u9986<\/h3>\n<p>Scalar DB\u5e93\u53ef\u4ee5\u5728Maven Central\u4e0a\u4f7f\u7528\u3002\u8bf7\u4f7f\u7528Gradle\u6216Maven\u7b49\u6784\u5efa\u5de5\u5177\u8fdb\u884c\u5b89\u88c5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">dependencies<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"n\">implementation<\/span> <span class=\"nl\">group:<\/span> <span class=\"s1\">'com.scalar-labs'<\/span><span class=\"o\">,<\/span> <span class=\"nl\">name:<\/span> <span class=\"s1\">'scalardb'<\/span><span class=\"o\">,<\/span> <span class=\"nl\">version:<\/span> <span class=\"s1\">'3.3.0'<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>&lt;dependency&gt;\r\n  &lt;groupId&gt;com.scalar-labs&lt;\/groupId&gt;\r\n  &lt;artifactId&gt;scalardb&lt;\/artifactId&gt;\r\n  &lt;version&gt;3.3.0&lt;\/version&gt;\r\n&lt;\/dependency&gt;\r\n<\/code><\/pre>\n<h3>\u521b\u5efa\u5c5e\u6027\u6587\u4ef6<\/h3>\n<p>\u4e3a\u4e86\u8fde\u63a5\u6570\u636e\u5e93\/\u5b58\u50a8\uff0cScalar DB\u5c06\u521b\u5efa\u4e00\u4e2a\u5c5e\u6027\u6587\u4ef6\u3002\u5728\u672c\u6b21\u8bbe\u7f6e\u4e2d\uff0c\u6211\u4eec\u5c06\u4f7f\u7528Cassandra\u4f5c\u4e3a\u672c\u5730\u73af\u5883\u3002\u6587\u4ef6\u540d\u5c06\u4e3adatabase.properties\u3002<\/p>\n<p>Scalar DB\u652f\u6301\u7684\u6570\u636e\u5e93<\/p>\n<p>\u8bf7\u53c2\u8003\u5404\u4e2a\u6570\u636e\u5e93\u4e2d\u7684\u5c5e\u6027\u6587\u4ef6\u914d\u7f6e\u65b9\u6cd5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># Comma separated contact points\r\n<\/span><span class=\"py\">scalar.db.contact_points<\/span><span class=\"p\">=<\/span><span class=\"s\">localhost<\/span>\r\n\r\n<span class=\"c\"># Port number for all the contact points. Default port number for each database is used if empty.\r\n<\/span><span class=\"py\">scalar.db.contact_port<\/span><span class=\"p\">=<\/span><span class=\"s\">9042<\/span>\r\n\r\n<span class=\"c\"># Credential information to access the database\r\n<\/span><span class=\"py\">scalar.db.username<\/span><span class=\"p\">=<\/span><span class=\"s\">cassandra<\/span>\r\n<span class=\"py\">scalar.db.password<\/span><span class=\"p\">=<\/span><span class=\"s\">cassandra<\/span>\r\n\r\n<span class=\"c\"># Cassandra storage implementation\r\n<\/span><span class=\"py\">scalar.db.storage<\/span><span class=\"p\">=<\/span><span class=\"s\">cassandra<\/span>\r\n<\/code><\/pre>\n<h3>\u521b\u5efa\u6a21\u5f0f\u6587\u4ef6<\/h3>\n<p>\u6a21\u5f0f\u6587\u4ef6\u5c06\u4f7f\u7528JSON\u6587\u4ef6\u521b\u5efa\u3002\u8fd9\u6b21\u6211\u4eec\u5c06\u5176\u4fdd\u5b58\u4e3aschema.json\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">{<\/span>\r\n  <span class=\"nl\">\"demo.groups\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nl\">\"transaction\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nl\">\"partition-key\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n      <span class=\"s2\">\"group_id\"<\/span>\r\n    <span class=\"p\">],<\/span>\r\n    <span class=\"nl\">\"clustering-key\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[],<\/span>\r\n    <span class=\"nl\">\"columns\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nl\">\"group_id\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"TEXT\"<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nl\">\"group_name\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"TEXT\"<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nl\">\"group_users\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"TEXT\"<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nl\">\"common_key\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"TEXT\"<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nl\">\"secondary-index\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n      <span class=\"s2\">\"common_key\"<\/span><span class=\"p\">]<\/span>\r\n  <span class=\"p\">},<\/span>\r\n  <span class=\"nl\">\"demo.users\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nl\">\"transaction\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nl\">\"partition-key\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n      <span class=\"s2\">\"user_id\"<\/span>\r\n    <span class=\"p\">],<\/span>\r\n    <span class=\"nl\">\"clustering-key\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[],<\/span>\r\n    <span class=\"nl\">\"columns\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nl\">\"user_id\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"TEXT\"<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nl\">\"email\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"TEXT\"<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nl\">\"family_name\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"TEXT\"<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nl\">\"given_name\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"TEXT\"<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nl\">\"user_detail\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"TEXT\"<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nl\">\"user_groups\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"TEXT\"<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nl\">\"common_key\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"TEXT\"<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nl\">\"secondary-index\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n      <span class=\"s2\">\"common_key\"<\/span>\r\n    <span class=\"p\">]<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>&#8220;\u4f46\u8fd9\u90e8\u5206\u5c06\u662fCassandra\u6570\u636e\u5e93\u7684\u952e\u7a7a\u95f4\u3002&#8221;<\/p>\n<p>\u5728&#8221;demo&#8221;\u4e4b\u540e\u7684\u53e5\u53f7\u540e\u9762\uff0c&#8221;groups&#8221;\u548c&#8221;users&#8221;\u5c06\u6210\u4e3a\u8868\u540d\u3002<\/p>\n<p>\u5982\u679c\u60f3\u8981\u8fdb\u884c\u4ea4\u6613\uff0c\u8bf7\u5c06transaction\u8bbe\u4e3atrue\u3002<\/p>\n<p>\u8bf7\u6839\u636e\u8bbe\u8ba1\u7684\u6570\u636e\u6a21\u578b\uff0c\u6307\u5b9a\u5206\u533a\u952e\uff08partition-key\uff09\uff0c\u805a\u7c07\u952e\uff08clustering-key\uff09\u5e76\u5728\u5217\u4e2d\u8bb0\u5f55\u952e\u548c\u6570\u636e\u7c7b\u578b\u3002\u6709\u5173Scalar DB\u652f\u6301\u7684\u6570\u636e\u7c7b\u578b\uff0c\u8bf7\u53c2\u8003Scalar DB\u4e2d\u7684\u6570\u636e\u5e93\u6a21\u5f0f\u3002<\/p>\n<p>\u53e6\u5916\uff0c\u4e3a\u4e86\u83b7\u53d6\u6240\u6709\u8868\u683c\u6570\u636e\uff0c\u6211\u4eec\u521b\u5efa\u4e86\u4e00\u4e2a\u8f85\u52a9\u7d22\u5f15\u3002<br \/>\n\u5728\u5361\u6851\u5fb7\u62c9\u4e2d\uff0c\u4f7f\u7528\u8f85\u52a9\u7d22\u5f15\u662f\u4e0d\u63a8\u8350\u7684\uff0c\u4f46\u662f\u8003\u8651\u5230\u8fd9\u6b21\u521b\u5efa\u7684API\u6570\u636e\u6570\u91cf\u4e0d\u591a\u4e14\u66f4\u65b0\u9891\u7387\u4e0d\u9ad8\u7684\u5217\uff0c\u6211\u4eec\u51b3\u5b9a\u4f7f\u7528\u5b83\u3002<\/p>\n<h3>\u8bbe\u7f6e\u6570\u636e\u67b6\u6784<\/h3>\n<p>\u4f7f\u7528\u521b\u5efa\u7684\u5c5e\u6027\u6587\u4ef6\u548c\u6a21\u5f0f\u6587\u4ef6\u6765\u8bbe\u7f6e\u6570\u636e\u5e93\u7684\u6570\u636e\u6a21\u5f0f\u3002<\/p>\n<p>\u8bf7\u5148\u786e\u8ba4Cassandra\u5df2\u7ecf\u542f\u52a8\u3002<br \/>\n\u8fd9\u6b21\u6211\u4eec\u662f\u5728Docker\u4e0a\u542f\u52a8\u7684\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">version<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">3.8'<\/span>\r\n<span class=\"na\">services<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">cassandra<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">arm64v8\/cassandra:3.11<\/span>\r\n    <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">cassandra-1\"<\/span>\r\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/docker\/cassandra-data:\/var\/lib\/cassandra<\/span>\r\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">9042:9042\"<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>docker-compose up <span class=\"nt\">-d<\/span>\r\n<\/code><\/pre>\n<p>\u4ece Scalar DB \u7684 GitHub \u4e2d\u4e0b\u8f7d\u4e0e ScalarDB \u76f8\u540c\u7248\u672c\u7684\u6a21\u5f0f\u52a0\u8f7d\u5668\u3002<\/p>\n<p>\u8bf7\u6839\u636e\u76ee\u5f55\u7ed3\u6784\u53c2\u8003\u5404\u4e2a\u6587\u4ef6\u7684\u5b58\u653e\u4f4d\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>java <span class=\"nt\">-jar<\/span> tools\/scalardb-schema-loader-3.3.0.jar <span class=\"nt\">--config<\/span> api\/src\/main\/resources\/database.properties <span class=\"nt\">--coordinator<\/span> <span class=\"nt\">-f<\/span> tools\/schema\/schema.json\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u662f\u6267\u884c\u7ed3\u679c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">********************************<\/span>\r\n<span class=\"k\">********************************<\/span>\r\n<span class=\"o\">[<\/span>main] INFO com.scalar.db.schemaloader.core.SchemaOperator - Creating the table <span class=\"nb\">groups <\/span><span class=\"k\">in <\/span>the namespace demo succeeded.\r\n<span class=\"o\">[<\/span>main] INFO com.scalar.db.schemaloader.core.SchemaOperator - Creating the table <span class=\"nb\">users <\/span><span class=\"k\">in <\/span>the namespace demo succeeded.\r\n<\/code><\/pre>\n<p>\u6211\u4eec\u5df2\u7ecf\u521b\u5efa\u4e86\u8868\u3002\u4e3a\u4e86\u786e\u8ba4\uff0c\u8ba9\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528CQL\u8fdb\u884c\u9a8c\u8bc1\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>docker <span class=\"nb\">exec<\/span> <span class=\"nt\">-it<\/span> cassandra-1 cqlsh\r\ncqlsh&gt; DESC demo.users\r\n\r\nCREATE TABLE demo.users <span class=\"o\">(<\/span>\r\n    user_id text PRIMARY KEY,\r\n    before_common_key text,\r\n    before_email text,\r\n    before_family_name text,\r\n    before_given_name text,\r\n    before_tx_committed_at bigint,\r\n    before_tx_id text,\r\n    before_tx_prepared_at bigint,\r\n    before_tx_state int,\r\n    before_tx_version int,\r\n    before_user_detail text,\r\n    before_user_groups text,\r\n    common_key text,\r\n    email text,\r\n    family_name text,\r\n    given_name text,\r\n    tx_committed_at bigint,\r\n    tx_id text,\r\n    tx_prepared_at bigint,\r\n    tx_state int,\r\n    tx_version int,\r\n    user_detail text,\r\n    user_groups text\r\n<span class=\"o\">)<\/span>\r\n\r\ncqlsh&gt; DESC demo.users\r\n\r\nCREATE TABLE demo.groups <span class=\"o\">(<\/span>\r\n    group_id text PRIMARY KEY,\r\n    before_common_key text,\r\n    before_group_name text,\r\n    before_group_users text,\r\n    before_tx_committed_at bigint,\r\n    before_tx_id text,\r\n    before_tx_prepared_at bigint,\r\n    before_tx_state int,\r\n    before_tx_version int,\r\n    common_key text,\r\n    group_name text,\r\n    group_users text,\r\n    tx_committed_at bigint,\r\n    tx_id text,\r\n    tx_prepared_at bigint,\r\n    tx_state int,\r\n    tx_version int\r\n<span class=\"o\">)<\/span>\r\n<\/code><\/pre>\n<p>\u4e00\u5207\u7121\u554f\u984c\uff0c\u6578\u64da\u7d50\u69cb\u8a2d\u7f6e\u5df2\u7d93\u5b8c\u6210\u3002<\/p>\n<p>\u4e0b\u6b21\u6211\u4eec\u4f1a\u8be6\u7ec6\u8bf4\u660e\u5177\u4f53\u7684API\u5b9e\u65bd\u65b9\u6cd5\u3002<\/p>\n<p>\u4f7f\u7528Spring Boot\u548cScalar DB\u521b\u5efaAPI\u7684\u65b9\u6cd5\u2461<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u592a\u957f\u4e0d\u770b \u6211\u4eec\u4f7f\u7528\u7531Scalar\u682a\u5f0f\u4f1a\u793e\u5f00\u53d1\u7684\u5206\u5e03\u5f0f\u4e8b\u52a1\u7ba1\u7406\u5668Scalar DB\u6765\u521b\u5efa\u5904\u7406\u4e8b\u52a1\u7684API\u3002 \u6211\u6253 [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-50212","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Spring Boot\u548cScalar DB\u6784\u5efaAPI\u7684\u65b9\u6cd5\u2460 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528spring-boot\u548cscalar-db\u6784\u5efaapi\u7684\u65b9\u6cd5\u2460\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Spring Boot\u548cScalar DB\u6784\u5efaAPI\u7684\u65b9\u6cd5\u2460\" \/>\n<meta property=\"og:description\" content=\"\u592a\u957f\u4e0d\u770b \u6211\u4eec\u4f7f\u7528\u7531Scalar\u682a\u5f0f\u4f1a\u793e\u5f00\u53d1\u7684\u5206\u5e03\u5f0f\u4e8b\u52a1\u7ba1\u7406\u5668Scalar DB\u6765\u521b\u5efa\u5904\u7406\u4e8b\u52a1\u7684API\u3002 \u6211\u6253 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528spring-boot\u548cscalar-db\u6784\u5efaapi\u7684\u65b9\u6cd5\u2460\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-11T03:20:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-28T23:06:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8ff1913a08637a6da9d2\/12-0.png\" \/>\n<meta name=\"author\" content=\"\u79d1, \u96c5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u79d1, \u96c5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/\",\"name\":\"\u4f7f\u7528Spring Boot\u548cScalar DB\u6784\u5efaAPI\u7684\u65b9\u6cd5\u2460 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-11-11T03:20:18+00:00\",\"dateModified\":\"2024-04-28T23:06:55+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Spring Boot\u548cScalar DB\u6784\u5efaAPI\u7684\u65b9\u6cd5\u2460\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a\",\"name\":\"\u79d1, \u96c5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"caption\":\"\u79d1, \u96c5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Spring Boot\u548cScalar DB\u6784\u5efaAPI\u7684\u65b9\u6cd5\u2460 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528spring-boot\u548cscalar-db\u6784\u5efaapi\u7684\u65b9\u6cd5\u2460\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Spring Boot\u548cScalar DB\u6784\u5efaAPI\u7684\u65b9\u6cd5\u2460","og_description":"\u592a\u957f\u4e0d\u770b \u6211\u4eec\u4f7f\u7528\u7531Scalar\u682a\u5f0f\u4f1a\u793e\u5f00\u53d1\u7684\u5206\u5e03\u5f0f\u4e8b\u52a1\u7ba1\u7406\u5668Scalar DB\u6765\u521b\u5efa\u5904\u7406\u4e8b\u52a1\u7684API\u3002 \u6211\u6253 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528spring-boot\u548cscalar-db\u6784\u5efaapi\u7684\u65b9\u6cd5\u2460\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-11-11T03:20:18+00:00","article_modified_time":"2024-04-28T23:06:55+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8ff1913a08637a6da9d2\/12-0.png"}],"author":"\u79d1, \u96c5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u79d1, \u96c5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/","name":"\u4f7f\u7528Spring Boot\u548cScalar DB\u6784\u5efaAPI\u7684\u65b9\u6cd5\u2460 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-11-11T03:20:18+00:00","dateModified":"2024-04-28T23:06:55+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Spring Boot\u548cScalar DB\u6784\u5efaAPI\u7684\u65b9\u6cd5\u2460"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a","name":"\u79d1, \u96c5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","caption":"\u79d1, \u96c5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cscalar-db%e6%9e%84%e5%bb%baapi%e7%9a%84%e6%96%b9%e6%b3%95%e2%91%a0\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50212","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=50212"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50212\/revisions"}],"predecessor-version":[{"id":83781,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50212\/revisions\/83781"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=50212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=50212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=50212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}