问题描述
正在构建一个从新闻网站获取文章并将内容推送到分析引擎的系统。然而,他们发现大部分的 Azure 成本都来自于一个 SQL 数据库。
这个数据库用于存储不同网站的 URL 列表。每一行都是新闻来源的名称和相应的 URL 链接。如果想要添加一个新的新闻源,就需要手动添加一行数据。因此,记录的数量非常少。在现阶段,即使在 alpha 阶段,我们大约有 5 条记录;长期来看,可能最多也只会有 100-200 条记录。
数据库的主要成本来自于频繁的读写操作(每 15 秒一次,所有行都会被更新)。
用户认为应该有一种比昂贵的 SQL 数据库更便宜的 Azure 资源来存储这些少量的数据。例如,可以考虑一个非关系型数据库,一个简单的 JSON 文件,可以在 Azure 上托管等等。
你有什么想法呢?
解决方案
以下解决方案仅供参考,具体实现时请根据需求和版本差异进行调整。
使用键值存储
在您的情况下,可能不需要 SQL 或关系型数据库。您可以考虑使用键值存储来存储网站 URL 列表。键值存储是一种简单的数据库类型,适用于存储需要快速读写的小规模数据。
以下是一些建议的键值存储解决方案:
– Redis: Redis 是一个开源的内存数据结构存储,适用于高速读写操作。您可以在 Azure 上使用 Azure Cache for Redis 服务,也可以在自己的虚拟机中部署 Redis。
– Azure Table Storage: Azure Table Storage 是一种托管的 NoSQL 数据存储解决方案,适用于存储大量键值对。它适用于存储您描述的简单数据结构。
自托管虚拟机 + 数据库
为了避免供应商锁定,并且控制成本,您可以考虑在 Azure 上租用一台虚拟机,然后在上面部署适合您需求的数据库。这样可以更好地控制数据库的成本和功能。
以下是一些建议的自托管虚拟机 + 数据库解决方案:
– 在 Azure 上创建一台虚拟机,例如使用 Azure Virtual Machines。
– 在虚拟机上安装适合您需求的数据库,例如 MongoDB、MySQL 等。
– 将您的数据存储在虚拟机的数据库中。
存储账户表格
Azure 提供了一种名为 “Storage Account” 的解决方案,其中包括 Table Storage。您可以使用 Storage Account Table 来存储简单的键值对数据。这是一个经济且适合小规模数据的选项。
以下是如何使用 Storage Account Table 的步骤:
1. 在 Azure 门户中创建一个 Storage Account。
2. 在 Storage Account 中创建一个 Table。
3. 使用适当的 SDK 或工具连接到 Storage Account Table 并执行读写操作。
虚拟机 + LAMP 服务器
如果您希望使用关系型数据库,您可以在 Azure 上创建一个虚拟机,然后在虚拟机上部署一个 LAMP(Linux + Apache + MySQL + PHP)服务器。这将为您提供一个自主管理的环境,以存储和管理您的数据。
以下是使用虚拟机 + LAMP 服务器的步骤:
1. 在 Azure 门户中创建一台虚拟机,选择适用于 Linux 的映像。
2. 在虚拟机上安装 Apache、MySQL 和 PHP,配置您的 LAMP 服务器环境。
3. 使用 MySQL 存储和管理您的数据。
无论您选择哪种解决方案,都需要根据您的具体需求和技术熟悉程度来决定。请注意,解决方案的实施可能需要进行一些配置和调整,以适应您的情况。