[ 
https://issues.apache.org/jira/browse/KUDU-1945?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17711976#comment-17711976
 ] 

ASF subversion and git services commented on KUDU-1945:
-------------------------------------------------------

Commit 3019848d00ac721b30d98a1aeb77bc205352b7b5 in kudu's branch 
refs/heads/master from Marton Greber
[ https://gitbox.apache.org/repos/asf?p=kudu.git;h=3019848d0 ]

KUDU-1945 Add C++ example for non-unique PK

This patch adds an example based on Kudu C++ client API to showcase the
main operations performed on a table having a non-unique primary key.

STDOUT of the example:

Created a client connection
Created the schema:
(
    non_unique_key INT32 NOT NULL,
    auto_incrementing_id INT64 NOT NULL,
    int_val INT32 NOT NULL,
    PRIMARY KEY (non_unique_key, auto_incrementing_id)
)
Created the table
Inserted some row(s) into the table:
(int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=3, int64 auto_incrementing_id=2, int32 int_val=1)
(int32 non_unique_key=3, int64 auto_incrementing_id=3, int32 int_val=2)
(int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1)
(int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=2)
(int32 non_unique_key=2, int64 auto_incrementing_id=4, int32 int_val=0)
(int32 non_unique_key=2, int64 auto_incrementing_id=5, int32 int_val=1)
(int32 non_unique_key=2, int64 auto_incrementing_id=6, int32 int_val=2)
Demonstrating scanning ...
Scanned some row(s) WHERE non_unique_key = 1:
(int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1)
(int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=2)
Demonstrating UPDATE ...
Updated row(s) WHERE non_unique_key = 1 AND int_val = 2 to int_val = 98
(int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=3, int64 auto_incrementing_id=2, int32 int_val=1)
(int32 non_unique_key=3, int64 auto_incrementing_id=3, int32 int_val=2)
(int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1)
(int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=98)
(int32 non_unique_key=2, int64 auto_incrementing_id=4, int32 int_val=0)
(int32 non_unique_key=2, int64 auto_incrementing_id=5, int32 int_val=1)
(int32 non_unique_key=2, int64 auto_incrementing_id=6, int32 int_val=2)
Updated row(s) WHERE non_unique_key = 2 to int_val = 99
(int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=3, int64 auto_incrementing_id=2, int32 int_val=1)
(int32 non_unique_key=3, int64 auto_incrementing_id=3, int32 int_val=2)
(int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1)
(int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=98)
(int32 non_unique_key=2, int64 auto_incrementing_id=4, int32 int_val=99)
(int32 non_unique_key=2, int64 auto_incrementing_id=5, int32 int_val=99)
(int32 non_unique_key=2, int64 auto_incrementing_id=6, int32 int_val=99)
Updated row(s) WHERE non_unique_key = 2 AND auto_incrementing_id = 5 to\
int_val = 100
(int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=3, int64 auto_incrementing_id=2, int32 int_val=1)
(int32 non_unique_key=3, int64 auto_incrementing_id=3, int32 int_val=2)
(int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1)
(int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=98)
(int32 non_unique_key=2, int64 auto_incrementing_id=4, int32 int_val=99)
(int32 non_unique_key=2, int64 auto_incrementing_id=5, int32 int_val=\
100)
(int32 non_unique_key=2, int64 auto_incrementing_id=6, int32 int_val=99)
Demonstrating DELETE ...
Deleted row(s) WHERE non_unique_key = 3 AND int_val = 1
(int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=3, int64 auto_incrementing_id=3, int32 int_val=2)
(int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1)
(int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=98)
(int32 non_unique_key=2, int64 auto_incrementing_id=4, int32 int_val=99)
(int32 non_unique_key=2, int64 auto_incrementing_id=5, int32 int_val=\
100)
(int32 non_unique_key=2, int64 auto_incrementing_id=6, int32 int_val=99)
Deleted row(s) WHERE non_unique_key = 2
(int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=3, int64 auto_incrementing_id=3, int32 int_val=2)
(int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1)
(int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=98)
Deleted row(s) WHERE non_unique_key = 3 AND auto_incrementing_id = 3
(int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0)
(int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1)
(int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=98)
Deleted the table
Done

Change-Id: I8c6be6bece56788dc858468d1fcccff6955836ec
Reviewed-on: http://gerrit.cloudera.org:8080/19690
Tested-by: Alexey Serbin <ale...@apache.org>
Reviewed-by: Alexey Serbin <ale...@apache.org>


> Support generation of surrogate primary keys (or tables with no PK)
> -------------------------------------------------------------------
>
>                 Key: KUDU-1945
>                 URL: https://issues.apache.org/jira/browse/KUDU-1945
>             Project: Kudu
>          Issue Type: New Feature
>          Components: client, master, tablet
>            Reporter: Todd Lipcon
>            Priority: Major
>              Labels: roadmap-candidate
>
> Many use cases have data where there is no "natural" primary key. For 
> example, a web log use case mostly cares about partitioning and not about 
> precise sorting by timestamp, and timestamps themselves are not necessarily 
> unique. Rather than forcing users to come up with their own surrogate primary 
> keys, Kudu should support some kind of "auto_increment" equivalent which 
> generates primary keys on insertion. Alternatively, Kudu could support tables 
> which are partitioned but not internally sorted.
> The advantages would be:
> - Kudu can pick primary keys on insertion to guarantee that there is no 
> compaction required on the table (eg always assign a new key higher than any 
> existing key in the local tablet). This can improve write throughput 
> substantially, especially compared to naive PK generation schemes that a user 
> might pick such as UUID, which would generate a uniform random-insert 
> workload (worst case for performance)
> - Make Kudu easier to use for such use cases (no extra client code necessary)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to