我可以在不保留字符串实际内容的情况下对一堆值进行排序吗?双键排序一个来自内部另一个在云中

问题描述 投票:0回答:1

我想做什么

我想排序一堆字符串,很简单。

我的约束是什么?

我有原始文本存储在本地,其中包含我想要排序的真实文本,云有一些其他“列”的数据不是本地的,出于安全考虑,我无法从本地获取原始文本到云端。真正的限制是我不能在一个地方拥有所有数据,这会导致排序,难以在内部部署和云数据上进行分页。

我的想法(以及我需要帮助的地方)

也许我可以采用散列或其他方式从字符串中提取某些数据,使得原始字符串无法再现(处理安全事项),但提取的字符串足以让我可以对其进行排序。

本地数据:

[ { "id": 1, "name": "abcd" } ]

云数据:

[ { "id": 1, "price": "20" } ]

我需要在上面的例子中对价格和名称进行排序(想象一下100,000行这样的数据)。

sorting math
1个回答
0
投票

你需要做的是存储一对字符串和相应的id,例如在两个列表/数组中(无论您选择的编程语言提供什么)。 然后开始排序字符串,但每次移动字符串时,以相同的方式移动id。

或者,大多数编程语言都提供允许构建对的构造,然后根据字符串对这些对进行排序,这将自动移动ID。

两种方式都意味着在排序之后,您仍然可以找到每个字符串的id,然后使用该ID可以像往常一样访问相应的云数据。

作为示例,编程语言C提供复合数据类型构造

struct IdStringPair
{
    int id;
    char* string;
    /* actually just the address of where the full string is stored,
       but basically what you probably want to use */
};

几乎没有任何编程语言可以提供类似的东西。

相反,如果要排序的数据在云中,则必须在云中进行排序,即通过能够执行排序算法的事物。确保您将ID与密钥一起排序。然后找到非云字符串再次与之前相同。无论你以前做过什么来找到id的字符串,都要使用从云排序数据中获得的id。 这与第一种情况/解决方案相同,只是镜像。

核心概念是始终对ID以及密钥(和其他数据)进行排序,从而处理需要从clould和premise之间的差距的另一侧获取数据。这适用于分离数据排序的所有版本。

© www.soinside.com 2019 - 2024. All rights reserved.