2026-02-06 03:34:50 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<div class="database-services-demo">
|
|
|
|
|
|
<div class="demo-header">
|
|
|
|
|
|
<h4>数据库选型助手</h4>
|
2026-02-18 17:38:10 +08:00
|
|
|
|
<p class="demo-desc">
|
|
|
|
|
|
根据您的业务特点,推荐最适合的数据库方案
|
|
|
|
|
|
</p>
|
2026-02-06 03:34:50 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="db-selection">
|
|
|
|
|
|
<div class="db-categories">
|
|
|
|
|
|
<button
|
|
|
|
|
|
v-for="cat in categories"
|
|
|
|
|
|
:key="cat.id"
|
|
|
|
|
|
class="cat-btn"
|
|
|
|
|
|
:class="{ active: selectedCategory === cat.id }"
|
|
|
|
|
|
@click="selectCategory(cat.id)"
|
|
|
|
|
|
>
|
|
|
|
|
|
<span class="cat-icon">{{ cat.icon }}</span>
|
|
|
|
|
|
<span class="cat-name">{{ cat.name }}</span>
|
|
|
|
|
|
</button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
2026-02-18 17:38:10 +08:00
|
|
|
|
<div
|
|
|
|
|
|
v-if="selectedCategory"
|
|
|
|
|
|
class="db-comparison"
|
|
|
|
|
|
>
|
2026-02-06 03:34:50 +08:00
|
|
|
|
<div class="comparison-header">
|
|
|
|
|
|
<span class="aws-badge">AWS</span>
|
|
|
|
|
|
<span class="vs-text">对比</span>
|
|
|
|
|
|
<span class="aliyun-badge">阿里云</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="db-cards">
|
|
|
|
|
|
<div class="db-card">
|
|
|
|
|
|
<div class="db-header aws">
|
2026-02-18 17:38:10 +08:00
|
|
|
|
<div class="db-name">
|
|
|
|
|
|
{{ currentCategory.aws }}
|
|
|
|
|
|
</div>
|
2026-02-06 03:34:50 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
<div class="db-body">
|
|
|
|
|
|
<div class="feature-list">
|
2026-02-18 17:38:10 +08:00
|
|
|
|
<div
|
|
|
|
|
|
v-for="(feat, i) in currentCategory.awsFeatures"
|
|
|
|
|
|
:key="i"
|
|
|
|
|
|
class="feature"
|
|
|
|
|
|
>
|
2026-02-06 03:34:50 +08:00
|
|
|
|
✓ {{ feat }}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2026-02-18 17:38:10 +08:00
|
|
|
|
<div class="price-tag">
|
|
|
|
|
|
{{ currentCategory.awsPrice }}
|
|
|
|
|
|
</div>
|
2026-02-06 03:34:50 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="db-card">
|
|
|
|
|
|
<div class="db-header aliyun">
|
2026-02-18 17:38:10 +08:00
|
|
|
|
<div class="db-name">
|
|
|
|
|
|
{{ currentCategory.aliyun }}
|
|
|
|
|
|
</div>
|
2026-02-06 03:34:50 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
<div class="db-body">
|
|
|
|
|
|
<div class="feature-list">
|
2026-02-18 17:38:10 +08:00
|
|
|
|
<div
|
|
|
|
|
|
v-for="(feat, i) in currentCategory.aliyunFeatures"
|
|
|
|
|
|
:key="i"
|
|
|
|
|
|
class="feature"
|
|
|
|
|
|
>
|
2026-02-06 03:34:50 +08:00
|
|
|
|
✓ {{ feat }}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2026-02-18 17:38:10 +08:00
|
|
|
|
<div class="price-tag aliyun">
|
|
|
|
|
|
{{ currentCategory.aliyunPrice }}
|
|
|
|
|
|
</div>
|
2026-02-06 03:34:50 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
|
|
import { ref, computed } from 'vue'
|
|
|
|
|
|
|
|
|
|
|
|
const selectedCategory = ref('relational')
|
|
|
|
|
|
|
|
|
|
|
|
const categories = [
|
|
|
|
|
|
{ id: 'relational', name: '关系型数据库', icon: '📊' },
|
|
|
|
|
|
{ id: 'nosql', name: 'NoSQL 数据库', icon: '📦' },
|
|
|
|
|
|
{ id: 'cache', name: '缓存服务', icon: '⚡' },
|
|
|
|
|
|
{ id: 'analytics', name: '分析型数据库', icon: '📈' }
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
const categoryData = {
|
|
|
|
|
|
relational: {
|
|
|
|
|
|
aws: 'Amazon RDS / Aurora',
|
|
|
|
|
|
aliyun: 'RDS / PolarDB',
|
|
|
|
|
|
awsFeatures: ['MySQL/PostgreSQL/Oracle/SQL Server 支持', 'Aurora 5 倍性能提升', '自动故障转移和读副本', 'Serverless 自动扩缩容'],
|
|
|
|
|
|
aliyunFeatures: ['MySQL/SQL Server/PostgreSQL/Oracle 支持', 'PolarDB 计算存储分离', '秒级备份恢复', 'Oracle 语法兼容模式'],
|
|
|
|
|
|
awsPrice: '$0.017/小时起',
|
|
|
|
|
|
aliyunPrice: '¥0.12/小时起'
|
|
|
|
|
|
},
|
|
|
|
|
|
nosql: {
|
|
|
|
|
|
aws: 'Amazon DynamoDB',
|
|
|
|
|
|
aliyun: 'Tablestore',
|
|
|
|
|
|
awsFeatures: ['全托管 NoSQL 键值和文档数据库', '单表设计支持 PB 级规模', 'DAX 内存缓存加速', '全局表多区域复制'],
|
|
|
|
|
|
aliyunFeatures: ['分布式 NoSQL 数据库存储', '自动分片和负载均衡', '二级索引和全文检索', '毫秒级单点读写延迟'],
|
|
|
|
|
|
awsPrice: '按需 $1.25/百万次写',
|
|
|
|
|
|
aliyunPrice: '按量 0.4元/万次写'
|
|
|
|
|
|
},
|
|
|
|
|
|
cache: {
|
|
|
|
|
|
aws: 'Amazon ElastiCache',
|
|
|
|
|
|
aliyun: '云数据库 Redis',
|
|
|
|
|
|
awsFeatures: ['托管 Redis 和 Memcached', '集群模式自动分片', '只读副本和自动故障转移', '备份恢复和快照'],
|
|
|
|
|
|
aliyunFeatures: ['主从双节点架构', '自动故障切换', '读写分离能力', '数据持久化备份'],
|
|
|
|
|
|
awsPrice: '$0.012/小时起',
|
|
|
|
|
|
aliyunPrice: '¥0.08/小时起'
|
|
|
|
|
|
},
|
|
|
|
|
|
analytics: {
|
|
|
|
|
|
aws: 'Amazon Redshift',
|
|
|
|
|
|
aliyun: 'AnalyticDB',
|
|
|
|
|
|
awsFeatures: ['PB 级数据仓库', '列式存储和压缩', 'Spectrum 查询 S3 数据', '并发扩展和自动优化'],
|
|
|
|
|
|
aliyunFeatures: ['实时分析型数据库', 'MPP 大规模并行处理', '高并发低延迟查询', '自动索引和优化'],
|
|
|
|
|
|
awsPrice: '$0.25/小时起',
|
|
|
|
|
|
aliyunPrice: '¥2.0/小时起'
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const selectCategory = (id) => {
|
|
|
|
|
|
selectedCategory.value = id
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const currentCategory = computed(() => categoryData[selectedCategory.value])
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
|
|
.database-services-demo {
|
|
|
|
|
|
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
|
|
|
|
|
|
border-radius: 12px;
|
|
|
|
|
|
padding: 24px;
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.demo-header {
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
margin-bottom: 24px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.demo-header h4 {
|
|
|
|
|
|
margin: 0 0 8px 0;
|
|
|
|
|
|
font-size: 1.25rem;
|
|
|
|
|
|
background: linear-gradient(90deg, #00d4ff, #7b2cbf);
|
|
|
|
|
|
-webkit-background-clip: text;
|
|
|
|
|
|
-webkit-text-fill-color: transparent;
|
|
|
|
|
|
background-clip: text;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.demo-desc {
|
|
|
|
|
|
margin: 0;
|
|
|
|
|
|
color: #8892b0;
|
|
|
|
|
|
font-size: 0.875rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.db-selection {
|
|
|
|
|
|
background: rgba(0, 0, 0, 0.2);
|
|
|
|
|
|
border-radius: 12px;
|
|
|
|
|
|
padding: 20px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.db-categories {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
gap: 8px;
|
|
|
|
|
|
margin-bottom: 20px;
|
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.cat-btn {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
gap: 6px;
|
|
|
|
|
|
background: rgba(255, 255, 255, 0.05);
|
|
|
|
|
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
|
|
|
|
color: #e6f1ff;
|
|
|
|
|
|
padding: 8px 16px;
|
|
|
|
|
|
border-radius: 20px;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
font-size: 0.875rem;
|
|
|
|
|
|
transition: all 0.2s ease;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.cat-btn:hover {
|
|
|
|
|
|
background: rgba(255, 255, 255, 0.1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.cat-btn.active {
|
|
|
|
|
|
background: linear-gradient(135deg, #00d4ff, #7b2cbf);
|
|
|
|
|
|
border-color: transparent;
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.cat-icon {
|
|
|
|
|
|
font-size: 1rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.comparison-header {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
gap: 16px;
|
|
|
|
|
|
margin-bottom: 16px;
|
|
|
|
|
|
padding-bottom: 12px;
|
|
|
|
|
|
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.aws-badge, .aliyun-badge {
|
|
|
|
|
|
padding: 6px 14px;
|
|
|
|
|
|
border-radius: 16px;
|
|
|
|
|
|
font-size: 0.8125rem;
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.aws-badge {
|
|
|
|
|
|
background: rgba(255, 153, 0, 0.2);
|
|
|
|
|
|
color: #ff9900;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.aliyun-badge {
|
|
|
|
|
|
background: rgba(255, 106, 0, 0.2);
|
|
|
|
|
|
color: #ff6a00;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.vs-text {
|
|
|
|
|
|
color: #8892b0;
|
|
|
|
|
|
font-size: 0.75rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.db-cards {
|
|
|
|
|
|
display: grid;
|
|
|
|
|
|
grid-template-columns: 1fr 1fr;
|
|
|
|
|
|
gap: 16px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.db-card {
|
|
|
|
|
|
background: rgba(0, 0, 0, 0.2);
|
|
|
|
|
|
border-radius: 10px;
|
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.db-header {
|
|
|
|
|
|
padding: 12px 16px;
|
|
|
|
|
|
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.db-header.aws {
|
|
|
|
|
|
background: rgba(255, 153, 0, 0.1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.db-header.aliyun {
|
|
|
|
|
|
background: rgba(255, 106, 0, 0.1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.db-name {
|
|
|
|
|
|
font-size: 1rem;
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
color: #e6f1ff;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.db-body {
|
|
|
|
|
|
padding: 16px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.feature-list {
|
|
|
|
|
|
margin-bottom: 12px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.feature {
|
|
|
|
|
|
font-size: 0.8125rem;
|
|
|
|
|
|
color: #e6f1ff;
|
|
|
|
|
|
padding: 4px 0;
|
|
|
|
|
|
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.price-tag {
|
|
|
|
|
|
background: rgba(0, 212, 255, 0.1);
|
|
|
|
|
|
color: #00d4ff;
|
|
|
|
|
|
padding: 6px 12px;
|
|
|
|
|
|
border-radius: 6px;
|
|
|
|
|
|
font-size: 0.8125rem;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.price-tag.aliyun {
|
|
|
|
|
|
color: #ff6a00;
|
|
|
|
|
|
background: rgba(255, 106, 0, 0.1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@media (max-width: 768px) {
|
|
|
|
|
|
.db-categories {
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.db-cards {
|
|
|
|
|
|
grid-template-columns: 1fr;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|