繁体   English   中英

Node.js图像库的数据库解决方案

[英]Database solution for Node.js image gallery

我正在使用Node.js开发基于Web的个人飞机图库,以向朋友/同事/等等展示我的照片。 服务器最多可容纳数百张或1-2千张此类照片(作为静态文件),而其附带数据将存储在数据库中。

该网站不应产生太多流量(一次只能访问1-2次)。 它的主要功能是复杂的搜索“引擎”,能够按飞机制造商,飞机类型,飞机注册,航空公司,拍摄照片的机场,照片的日期以及许多其他方面过滤和订购照片。

我已经开发了一个关系模型来实现这些目标,并将在MySQL数据库中实现:

                               +-------+
                               | Photo |
                               +-------+
                              N |     | N
               +----------------+     +--------------+
             1 |                                     | 1
  +------------------------+            +--------------------------+
  |Aircraft | e.g. "G-CIVL"|            | Airport | e.g. "Heathrow"|
  +------------------------+            +--------------------------+
             N |                                     | N
             1 |                                     | 1
   +-----------------------+              +-----------------------+
   | Model | e.g. "747-400"|              |  City | e.g. "London" |
   +-----------------------+              +-----------------------+
             N |                                     | N
             1 |                                     | 1
 +-------------------------+         +--------------------------------+
 |Model_family | e.g. "747"|         | Country | e.g. "United Kingdom"|
 +-------------------------+         +--------------------------------+
             N |
             1 |
+----------------------------+
|Manufacturer | e.g. "Boeing"|
+----------------------------+

每个照片条目都将包含有关拍摄地点的信息(机场-城市-国家“分支机构”)和照片中显示的飞机(飞机-模型-模型_家庭-制造商“分支机构”)。

如前所述,访问者应该能够按这些表的任何列过滤照片,要求数据库查询中具有不同的联接以提供不同的过滤选项。 例子:

  1. 用户正在寻找在特定国家/地区拍摄的照片。 返回相应图像数据的SELECT查询应加入Photo,Airport,City和Country表。
  2. 用户正在按某种飞机模型过滤照片。 SELECT查询将只需要联接Photo和Model表。

如果用户同时按多个(或更多)方面过滤照片,则问题将变得更加复杂。

因此,需要一个复杂的应用程序级SQL查询构建算法,该算法将考虑上述表结构。

我的问题是:

  • 提到的方法(复杂的SQL字符串构建算法)是解决该问题的好方法吗?

  • 还是应该将所有表都联接在一起,而不考虑用户的过滤选项? (似乎是为了提高代码可维护性而进行的严重性能折衷)

  • 还是像MongoDB这样的NoSQL解决方案(具有更平坦(和非规范化)的模型)更适合此任务? 不必为不同的过滤选项设置不同的联接似乎是一大优势。 存储的数据极不可能被更新或删除,因此非规范化可能不是一个严重的问题。

提前谢谢你的帮助。

我没有用过MYSQL ,但是在NoSQL( Mongodb )中使用了

您可以获得类似这样的数据结构,并且可以基于每个参数进行搜索

[
  {
    "_id": 0,
    "Airport": "Heathrow",
    "city": "London",
    "country": "United Kingdom",
    "Aircraft": "G-CIVL",
    "model": "747-400",
    "model_family": "747",
    "manufacturer": "Boeing",
    "photo_url": "http://www.dummy-url/dakshdajk8sdjkhs8ds8dh8sd8sdj8s.png"
  },
  {
    "_id": 1,
    "Airport": "Heathrow",
    "city": "London",
    "country": "United Kingdom",
    "Aircraft": "G-CIVL",
    "model": "747-400",
    "model_family": "747",
    "manufacturer": "Boeing",
    "photo_url": "http://www.dummy-url/dakshdajk8sdjkhs8ds8dh8sd8sdj8s.png"
  }
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM