繁体   English   中英

我应该如何/使用什么数据库将可查询列表存储在数据库中? 链接表似乎非常过度和缓慢?

[英]How/what DB should I use to store a queryable list in a database? Linked tables seems very excessive and slow?

我正在开发一个将拥有数百万个主键(用户 ID)的项目。 每个用户都会有一个未知长度的属性列表(在 1 到 100 之间,但在几乎所有可能的属性总数约为 1000 个的情况下通常 < 5)。 此列表需要可查询,但才能找到具有相同属性的用户。

我将如何做到这一点? 一种方法似乎是为每个用户创建一个唯一的表,但这意味着我会有很多看起来错误的表。 使用的其他方法似乎是将列表存储为 blob,但这会使查询变得困难。

我更喜欢使用 python 但如果我相当轻量级的服务器遇到问题,我可能会切换到 c++。 到目前为止,我使用的唯一 sql DB 是 SQLite 但这可能并不理想,因为它每秒无法处理足够的提交(尽管我可以排队)。

我应该使用什么数据库,我应该如何正确地做到这一点?

对于这种情况,我猜基于图形的数据库GDB是不错的选择。

您可以将属性定义为节点; 著名且强大的基于图形的数据库之一是Neo4jNeo4j 没有表 Neo4j 使用Cypher (图形查询语言)来处理其查询。

来自 Neo4j 网站:

与将数据按行、列和表排列的传统数据库不同,Neo4j 具有由数据记录之间的存储关系定义的灵活结构。 使用 Neo4j,每个数据记录或节点都存储指向它所连接的所有节点的直接指针。 因为 Neo4j 是围绕这种简单而强大的优化设计的,所以它执行复杂连接查询的速度比其他数据库快几个数量级,而且深度更深。

来自 Neo4j 网站关于 Cypher:

使用 Neo4j,数据之间的连接被存储——而不是在查询时计算。 Cypher 是一种功能强大的图形优化查询语言,可以理解并利用这些存储的连接。 当试图在数据中找到模式或洞察力时,Cypher 查询通常比大量的 SQL JOIN更简单、更容易编写。 由于Neo4j 没有表,因此无需担心 JOIN。

您可以在他们的网站主页上找到与 SQL 的一些比较: https://neo4j.com/

如果您想在 python 中使用 Neo4j,请检查这些链接:

  1. https://neo4j.com/developer/python/
  2. https://pypi.org/project/neo4j-driver/
  3. https://towardsdatascience.com/neo4j-cypher-python-7a919a372be7

暂无
暂无

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

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